如果能手写出汉诺塔,可提升对函数和递归的理解。
一:分析汉诺塔的规律,
假设只有一个盘子
移动:a->c
假设有2个盘子
移动:a -> b
a -> c
b -> c
假设有3个盘子
移动:a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c
通过分析就发现了汉诺塔的核心思维,主要有2点: 假设有n个盘子从a移动到c 。
1: 首先将n-1个盘子移动到b,才能将盘子n从a移动到c,
2: 最后是将在b上的n-1 个盘子 ,从b移动到c。
递归就是重复,然后就是不管中间过程,只有有递归的出口就行,因此为了解决这个问题优先想到使用递归。
二:汉诺塔的源代码:
def move(n,a,b,c):
if n==1 :
print(a,"->",c)
else:
move(n-1,a,c,b)
print(a ,"->",c)
move(n-1,b,a,c)
n=int(input("请输入盘子的数量:"))
move(n,'a','b','c')
运行结果: