qin_yin 发表于 2020-9-11 23:19:14

汉诺塔递归算法理解

最近看了很多知乎上面的解答,以及b站的视频,还有论坛的解答,始终没有理解其本身,

之前也发个一个关于递归求助贴,这位鱼c导师给出了答案,也满耐心的给解答了,同时也认可他的解答,他的答案虽然我没有完全理解其本身,。
sunrise085
https://fishc.com.cn/forum.php?mod=viewthread&tid=178982&highlight=%BA%BA%C5%B5

def hanoi(n, x, y, z):
    if n == 1:
      print(x, ' --> ', z)
    else:
      hanoi(n-1, x, z, y) # 将前n-1个盘子从x移动到y上
      print(x, ' --> ', z) # 将最底下的最后一个盘子从x移动到z上
      hanoi(n-1, y, x, z) # 将y上的n-1个盘子移动到z上
可能由于个人的理解能力不是很好,以上代码还是有诸多不理解地方,
1,else中有两个调用函数,
他是先执行第一个函数调用,
还是先执行第二个函数调用或者等第一个函数递归完毕,
再执行第二个呢。或者其他的流程
希望能把上面的代码每一个流程,参数的变化,用图逐一展示。


Stubborn 发表于 2020-9-12 00:09:32

流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给调用者)

比如你这个汉诺塔函数,从第一次else调用:hanoi(n-1, x, z, y),它会一直调用,直到收到结果

http://pythontutor.makerbean.com/visualize.html#mode=display   运行可视化,你去这里看看把,还有看不懂在说

风过无痕1989 发表于 2020-9-12 00:24:04

Stubborn 发表于 2020-9-12 00:09
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给 ...

这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼

永恒的蓝色梦想 发表于 2020-9-12 10:17:13

风过无痕1989 发表于 2020-9-12 00:24
这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼

只是因为只能计算999步。

风过无痕1989 发表于 2020-9-12 11:21:39

永恒的蓝色梦想 发表于 2020-9-12 10:17
只是因为只能计算999步。

哦,哦,谢谢指点!
页: [1]
查看完整版本: 汉诺塔递归算法理解