猫史档案馆


学不懂递归?用递归解决汉诺塔问题!

用户:Meow_sauceMeow_sauce查看:1 回复:6 评论:1 创建时间:2021-07-23T13:59:04


           有许多萌新在接触到python的函数递归时就十分头疼:这么多,我要算到什么时候去啊!emotion_编程猫_伤心

          实际上,递归并不难,我来给大家说说递归到底有什么用吧:首先,递归的核心思想是分治策略。分治,即 “分而治之”(divide and conquer),把一个复杂的问题分成两个或者更多相同的或者类似的子问题,直到最后的子问题可以简单地被直接求解,原问题就是子问题的解的合并。emotion_雷电猴_举手

         是不是
很复杂?emotion_雷电猴_疑问不用急,我们用汉诺塔的问题来说明!

center_image

      有A、B、C三根柱子,A柱子上有n个圆盘,圆盘从下往上依次变小,要求照这样把A柱上的圆盘全部移到C柱,最终C柱也和A柱开始时一模一样。

          移动规则:1、一次只能移动1个。2、大圆盘不能在小圆盘上。

          看着好像十分复杂,但众所周知:把大象塞进冰箱里只用三步:1、打开冰箱门。2、把大象塞进去。3、关上冰箱门。我们现在也来分步骤:

          1、把n-1层圆盘移到B柱。

          2、把最底层的圆盘移到C柱。

          3、把B柱上的圆盘移到C柱上。

4-1=3,上面3个可以看做子问题来解答emotion_编程猫_厉害了

现在开始写代码!emotion_雷电猴_嗯嗯

 

center_image

好了,代码大家可以复制:

def hanoi(n,a,b,c):#分别代表层数、起始位置、过渡位置和目标位置
    if n==1:
        print(a,'-->',c)
    else:
        hanoi(n-1,a,c,b)#第1步
        print(a,'-->',c)#第2步
        hanoi(n-1,b,a,c)#第三步

hanoi(3,'a','b','c')#有三层


回复

上一页1 页 / 共 1下一页
Mellin_AmpMellin_Amp

好!很有精神!

点赞0


评论


lsk666666lsk666666

就注意递归要注意结束条件,要不然会抛递归错误

点赞0


评论


wwwloadwwwload

我人傻了,看了二遍愣是看不懂

点赞0


评论


天猫_天猫_

在kitten也可以使用递归做出循环效果

点赞0


评论


一个STUB用户_6923702一个STUB用户_6923702

1、把n-1层圆盘移到B柱。->大 中 小

2、把最底层的圆盘移到C柱。->大 小中 空->空 小中 大

3、把B柱上的圆盘移到C柱上。->小 中 大->小 空 中大 ->空 空 小中大

容易理解了吧emotion_doge

点赞0


评论


小苏打_小苏打_

本人c++过来的

我表示。。。

沉默。。。。

<doge />

点赞0


评论