前言
递归思维实质上体现了一种逆向推理的逻辑方式,即从最终结果回溯至初始条件。在一步步的倒推过程中,我们发现每一步要解决的问题本质上都是一样的。通过将复杂的大问题分解为多个相似的小规模子问题,进而揭示出解决问题的最基本单元,为寻找最简化的解决方案提供了有效途径。
接下来,本篇文章通过几个例子带你感受下利用递归思维解决问题的魔力。
逻辑题
狼吃羊
有5只灰太狼和1只喜羊羊被困在了孤岛上,狼可以选择吃草或者吃羊,只能同时有一只狼吃羊,其他的狼当观众。如果有狼选择吃羊,那么吃完以后这只灰太狼会变成美羊羊,剩下的狼可以继续选择吃它或吃草。假设每只狼都很聪明,并且每只狼都贪生怕死,那么喜羊羊会被灰太狼吃掉吗?
如果 5 只灰太狼的情况太复杂,我们可以先假设只有 1 只灰太狼,当只有 1 只灰太狼和 1 只喜羊羊时,喜羊羊一定会被吃掉。
当我们知道 1 只灰太狼和 1 只喜羊羊存在时的选择后,我们就可以假设有 2 只灰太狼和 1 只喜羊羊的情况,如果此时选择吃羊,那么吃掉后情况将回到 1 只灰太狼和 1 只喜羊羊的情况,而在这种情况下,我们已经知道喜羊羊一定会被吃掉,所以当有 2 只灰太狼和 1 只喜羊羊时,应该选择不吃。
最终,按照这种思路,我们发现最本质的问题就是在问当 1 只狼和 1 只羊同时存在时做出的选择。
| 狼的数量 | 羊的数量 | 选择 | |
|---|---|---|---|
| 1 | 1 | 吃 | |
| 2 | 1 | 不吃 | 如果此时有一只狼吃了羊,那么整个局面就会变成了1只狼和1只羊的情况,而前一步已经分析出在1只狼和1只羊的情况下,羊会被吃,所以聪明狼此时应该选择不吃。 |
| 3 | 1 | 吃 | 同理,3只狼中有一种吃了羊之后,局面就变成了2只狼和1只羊的情况,根据前一步分析得出,在2只狼和1只羊的情况下,羊不会被吃,所以聪明狼此时会争先恐后的把羊吃掉。 |
以此类推,最终结论就是奇数只狼时一定会把羊吃掉,偶数只狼时则不会吃。
舞会
有一群人开舞会,每人头上都戴着一顶帽子.帽子只有黑白两种颜色,黑的至少有一顶.每个人都能看到其它人帽子的颜色,却看不到自己的.主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就拍手.第一次关灯,没有声音.于是再开灯,大家再看一遍,关灯时仍然鸦雀无声.一直到第三次关灯,才有劈劈啪啪手的声音响起.请问有多少人带的是黑帽子?
如果你以前学会了狼吃羊的问题,那么本题舞会带帽子的问题也可以采用相同的方式来解决。比如先假设 1 人带黑帽子会是什么样的情况,再假设 2 人、3 人带黑帽子的情况之后尝试找到问题的本质。
你可以先尝试分析。
以下,是具体分析过程。
假设舞会有10个人参加。如果带帽子的是 1 人,那么带白帽子的就有 9 人,按照此思路开始分析。
| 带黑帽子的数量 | 带白帽子的数量 | |
|---|---|---|
| 1 | 9 | 戴黑帽的人一看,其他9个人戴的都是白的,所以第一关灯时他一定会拍手 |
| 2 | 8 | 两个戴黑帽的人第一次看到的都是1个黑帽和8个白帽,因为此时无法判断自己戴的是黑帽还是白帽,所以第一次关灯时没人拍手,因为第一次关灯时没人拍手,就证明了肯定不是1黑9白的情况,那就只剩2黑8白的情况了,所以第二次关灯,两个人就都拍手了。 |
| 3 | 7 | 三个戴黑帽的人第一次看到的都是2个黑帽和7个白帽,此时三个人都无法判断自己戴的是黑帽还是白帽,所以第一次关灯没人拍手,同理,第二次关灯也不会有人拍手,因为根据前面的推论,只有在看到是1黑8白时,第二次关灯才会有人拍手,此时三个人就都明白了,既然不是2黑8白的情况,那就一定是3黑7白了,所以第三次关灯时,三个人就都拍手了。 |
以此类推,最终结论就是第几次关灯有人拍手,就有多少人戴黑帽子。
数学游戏
报数
报数游戏是一个非常经典的需要通过逆向思维来思考获胜方式的小游戏一般 2、3 年级的小朋友就可以参与了,玩法大致如下:
有甲、乙两人从 1 开始轮流报数,每人每次可以报 1 个数或 2 个数,谁先报到 21 谁就赢。如果想要必赢,是先报还是后报?
这个游戏只要多玩几次就能发现,要想先报到 21,就等于要先报到 18,同理,要想先报到 18,就等于要先报到 15。最终,不难发现,想要必赢就得确保每次可以报到 3 的倍数的数。
所以,如果是甲先报,无论是报 1 还是报 2,接下来乙都可以一直报到 3 的倍数,所以当都清楚游戏规则的前提下,谁先报谁必输!
但如果是要求谁先报到 20 谁就赢呢?20 的前一个制胜数是 17,再往前以此是 14,、11、8、5、2,所以,此时就变成了谁先报谁必赢了!
汉诺塔
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
汉诺塔问题可以这样分析:
如果柱子上只有 1 个盘子(n = 1),那直接将 A 移动到 C 即可。

如果有 2 个盘子(n = 2),则先将最上面的盘子移动到 B,再把下面的盘子移动到 C,最后把 B 上面的盘子移动到 C 即可。

如果有 3 个盘子(n = 3)呢?实际上要解决的就是,将最上面的两个盘子移动到 B 柱子上,再把下面的盘子移动到 C,最后把 B 上面的盘子移动到 C ,这个过程本质上和有 2 个盘子时是一样的。

而如何能顺利做到第二步呢?前面说了,我们完全可以把它当做只有两个盘子的情况,然后目标是从 A 柱移动到 B 柱的过程,以及再从B柱移动到C柱的过程。
所以,如果移动 n 个盘子需要f(n)f(n)f(n)步,则:f(n)=2∗f(n−1)+1f(n) = 2 * f(n - 1) + 1f(n)=2∗f(n−1)+1 步。
且我们通过实际操作已经知道 f(1)=1f(1) = 1f(1)=1,f(2)=3f(2) = 3f(2)=3,所以,f(3)=7f(3) = 7f(3)=7。
进一步观察我们还能发现移动次数实际上等于:$ 2^n - 1$,所以要移动 64 个盘子,哪怕一次只需要 1 秒,也需要 5800 多亿年,要知道地球存在至今也不过 45 亿年。
斐波那契数
斐波那契数列如下:0,1,1,2,3,5,8,13,21......0,1,1,2,3,5,8,13,21......0,1,


7720

被折叠的 条评论
为什么被折叠?



