不要被我们的标题误导了,递归不等于递只乌龟。
今天终于来到了,闫哥认为的第一个“玄学”算法了。
递归这玩意,对于初学者而言,在基础的数据结构和算法中,我认为可以归纳到到“玄学”这一类了。
那么,大家就会问了“既然递归跟玄学一样,那为什么还要学它呢?”。那我可以先给你说一句“不学也是可以滴,咱们直接转行,不学编程了”。其实到后面。比如,深度优先搜索,八皇后,回溯等算法的学习都会涉及到递归算法。
所以,咱们今天就放句狠话,必须搞定递归,搞的明明白白的。
对于“玄学”算法,我们就不能用正常的思维去学习它。既然是玄学,那么我们就先采用玄学的思维去理解和分析一下递归。
为什么称它为玄学呢?不是有多难,而是有些人,一看就明白,一用就精髓。而有些人呢,比如我,一看就会,一学就废,一开始就感觉递归是黑洞,我可以递进去,但就是归不出来。
这里呢。我们先敲一下重点。
递归:必须有递有归那才叫递归。
那么,接下来。我们先从一个故事去理解什么是递归吧。
在一个繁忙的大学食堂里,有一个长长的队伍,学生们都在耐心地等待着打饭。这个故事的主角是一个名叫小闫的学生,他刚刚加入队伍,但他有一个问题:他想知道自己在队伍中的确切位置。
小闫看着前面的人群,感到有些困惑。他想知道自己还要等多久才能打到饭,但他又不好意思直接问前面的人。突然,他灵机一动,决定用一种聪明的方法来解决这个问题。
小闫决定从队伍的最后一个人开始,也就是他前面的那个人,他称之为“前面的同学”。他问前面的同学:“你知道你在队伍中的位置吗?”前面的同学摇了摇头,但他说:“我可以问问我前面的同学。”
就这样,小闫的问题在队伍中传递开来。每个被问到的人都会问他们前面的同学,直到这个问题传到了队伍的最前面。
以下是就是一个简单的递归过程:
- 第 19 个人问第 18 个人:“你知道你在队伍中的位置吗?”
- 第 18 个人问第 17 个人:“你知道你在队伍中的位置吗?”
- 这样一直问到第 2 个人,他问第 1 个人:“你知道你在队伍中的位置吗?”
队伍的第一个人,也就是即将打饭的人,他笑着回答:“我是第一个,所以我确定我在队伍中的位置是 1。”(这里的第一个人就是我们的递归结束条件)
现在,这个信息开始返回给小闫:
- 第 2 个人告诉第 3 个人:“我是第二个,所以你是第三个。”
- 第 3 个人告诉第 4 个人:“我是第三个,所以你是第四个。”
- 这样一直传递,直到第 18 个人告诉第 19 个人:“我是第 18 个,所以你是第 19 个。”
最后,小闫前面的同学转过头告诉他:“我是第 18 个,所以你是第 19 个。” 小闫终于知道了他在队伍中的位置,他感到非常高兴。
小闫安心地等待着,最终轮到他打到饭。他一边吃着美味的饭菜,一边想着:“递归真是个神奇的东西,它帮助我解决了问题,而且还让队伍中的每个人都参与进来。”
(由此看来,小闫的道德素质真的没话说,从来不插队,而且还能让你学会递归。)
这个故事展示了递归的概念,其实就像一个链式反应,每个人都在解决问题的一部分,直到最终得到完整的答案。
上面的
标签:调用,递归,递龟,队伍,问题,算法,排序 From: https://blog.csdn.net/weixin_55818116/article/details/143588454