python递归例子1:汉诺塔问题。

汉诺塔(Hanoi Tower),三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘

目标:把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。

规则1:在小圆盘上都不能放大圆盘:

规则2:且在三根柱子之间一次只能移动一个圆盘

以两个盘子为例:

n=2时,步骤:

1,把小圆盘从a移动到b

2,把大圆盘从a移动到c

3,把小圆盘从b移动到c

n个盘子时,仍然和两个盘子的情况类似,大圆盘是最底下的第n个圆盘,小圆盘可以看做是除了大圆盘之外的小圆盘。

1,把n-1圆盘从a 经过c 移动到b

2,把第n个圆盘从a移动到c

3,把n-1个小圆盘从b 经过a 移动到c

从a柱子移动多个圆盘到b柱子时,必然要通过c柱子来实现。

代码实现:

def hanoi(n, a, b, c):
    if n > 0:
        hanoi(n-1, a, c, b)
        print('从 %s 移动到 %s' %(a, c))
        hanoi(n - 1, b, a, c)

 n为圆盘个数,‘a’,‘b’,‘c’ 分别为三根柱子。

 

posted @ 2023-06-06 20:44  天才九少  阅读(65)  评论(0)    收藏  举报