汉诺塔-py代码实现

 1 def hanoi(n, a, b, c):  # n个盘子,从a柱子经过b柱子移动到c柱上,每次移动的是当前柱子的最上面的盘子
 2     if n > 0:  # 有盘子的情况下,进行三步操作
 3         hanoi(n - 1, a, c, b)  # 操作一: n-1看做整体从a移动到b ,经过c的帮助,不管中间如何操作的
 4         print(f'移动 {a} 最上面的一个盘子 到 {c} 上')  # 操作二: 把最下面的一块 从a移动到c 因为上面的n-1已经移动到b了
 5         hanoi(n - 1, b, a, c)  # 操作三: 把b上面的n-1这个整体移动到c上面就完成了,经过a的帮助
 6 
 7 
 8 # 强调 这里有2种方法 即 a 完整移动到b,经过c,
 9 #                   a 完整移动到c,经过b  这里我写的是 这个方法
10 
11 def hanoi2(n, a, c, b): # a 完整移动到b,经过c
12     if n > 0:
13         hanoi2(n - 1, a, b, c)
14         print(f'{a} to {b}')
15         hanoi2(n - 1, c, a, b)

这个难点其实是2块,一个是要把最下面的 一块和上面的n-1块分开处理,然后递归处理

再一个是函数指代 a,b,c形参  与实参要搞清楚  

一定不要把 函数里的a,b,c理解成 固定的第一个柱子,第二个柱子,第三个柱子,  要看你的实参传递的是什么

我反正 是卡在这2点上,所以一上午在理解代码

总共就五行代码,写很容易,主要在思路和理解上面

posted @ 2021-12-29 11:33  学海无涯苦中作乐  阅读(61)  评论(0编辑  收藏  举报