汉诺塔递归算法理解
最近看了很多知乎上面的解答,以及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中有两个调用函数,
他是先执行第一个函数调用,
还是先执行第二个函数调用或者等第一个函数递归完毕,
再执行第二个呢。或者其他的流程
希望能把上面的代码每一个流程,参数的变化,用图逐一展示。
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给调用者)
比如你这个汉诺塔函数,从第一次else调用:hanoi(n-1, x, z, y),它会一直调用,直到收到结果
http://pythontutor.makerbean.com/visualize.html#mode=display 运行可视化,你去这里看看把,还有看不懂在说 Stubborn 发表于 2020-9-12 00:09
流程图有带你难画,你自己画画。最重要的是,遇到函数运行,就往函数里面钻,直到它返回结果。(返回的是给 ...
这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼 风过无痕1989 发表于 2020-9-12 00:24
这个程序不错,我输入 26 层 汉诺塔,能计算出共需要 999 步执行完成。我想收藏,可惜只能收藏第1楼
只是因为只能计算999步。 永恒的蓝色梦想 发表于 2020-9-12 10:17
只是因为只能计算999步。
哦,哦,谢谢指点!
页:
[1]