首先给函数名中的abc下一个定义:
a=操作区;b=缓冲区;c=目标区 这样程序可以改为 : move(n,操作区,缓冲区,目标区)
我们的目的:将 操作区 的数移动到 目标区 里,所以函数执行只有一句话:操作区--->目标区
第一步:
将 操作区a 前n-1个数移动到 缓冲区b 里,这时 缓冲区b 就是我们这一步的目标区;
所以是move(n-1,a,c,b)
第二步:
将 操作区a 的最后一个数移动到 目标区c 里,即move(1, a, b, c)
注意: 这时,操作区a的东西已经全部移动到缓冲区b和目标区c里了,操作区a已经为空了。 所以现在,缓冲区b就成为了新的操作区(里头有m=n-1个数),而之前的操作区a成为了新的缓冲区
所以第三步是将a、b交换后再一次执行move函数,即 move(m,b,a,c),并且此时m=n-1。
def move(n, a, b, c):
if n == 1:
print(a, '-->', c)#n=1由a移动到c
else:
move(n-1,a,c,b)#由a移动到b
move(1,a,b,c)#执行a里面剩下的一个数移动到c
move(n-1,b,a,c)#由b移动到c
汉诺塔递归
最新推荐文章于 2023-06-30 16:52:09 发布