汉诺塔问题: 古代有一个梵塔,塔内有三个基座,A,B,C,开始时A基座上有64个盘子,盘子的大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A基座上移动到B基座上,但每次只允许移动一个盘子,且在移动过程中,3个基座上的盘子都始终保持着大盘在下,小盘在上。移动过程中可以利用C基座做辅助。
此问题又被称为“世界末日问题”,因为以最高效的移动(无不必要的移动)方法,以每秒移动一次的速度,64 个盘子也需要近580亿年的时间。
'''
算法:大规模转化为小规模问题,把上面的n-1个盘子看做一个小盘子,那就只有两个盘子,转化成移动两个盘子的问题。
第一步:把上面n-1个盘子借助B基座先移动到C基座上
第二步:把最底下那个盘子移动到B基座
第三步:再把C基座上的n-1个盘子借助A基座移动到B基座上
记作hanoi(n,a,b,c):a,b,c不代表固定的基座,根据移动次数变化
n:问题的规模,盘子的个数
a:代表每次移动时的起始基座
b:代表每次移动时的终点基座
c:代表每次移动时的辅助基座
则此问题的步骤:
第一步:hanoi(n-1,a,c,b)
第二步:把最下面的那个大盘子从起点基座移动到终点基座
第三步:hanoi(n-1,c,b,a)