[Python]递归汉诺塔
move_count = 0 ; def hanoi(n,src,buffer,dst): 'n:需移动的盘子个数,src:盘子原来的位置,buffer:盘子可临时使用的位置,dst:盘子的目标移动位置' global move_count; if n < 1: print('输入有误'); return None; elif n==1: print(src + '----->' + dst); move_count += 1; else: hanoi(n-1,src,dst,buffer); hanoi(1,src,buffer,dst); hanoi(n-1,buffer,src,dst); move_count = 0 ; hanoi(5,'A','B','C'); print('move_steps = ',move_count);
print(hanoi.__doc__);
运行结果(Python3.7):
A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
A----->B
C----->B
C----->A
B----->A
C----->B
A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
B----->A
C----->B
C----->A
B----->A
B----->C
A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
move_steps = 31
n:需移动的盘子个数,src:盘子原来的位置,buffer:盘子可临时使用的位置,dst:盘子的目标移动位置
~不再更新,都不让我写公式,博客园太拉胯了