汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
我们可以用几步来解,找到一般规律
第一步:我们把上面故事中的 64 换成 n 这个变量,这样就变成求将 n 个圆盘转移到第三根柱子上需要多少步。
第二步:将 n 替换成比较小的数,我们下面就分别用0、1、2、3来分别计算需要多少步。
设Pn代表第 n 个圆盘,Tn 代表将 n 个圆盘转移到第三根柱子上的步数:
T0 = 0
T1 = 1
T2 = 3
T3 = 7
第三步:我们发现,在移动第 Pn 个圆盘之前需要把他上面n-1个盘子都移到第二根柱子上,而要移动第Pn-1这个圆盘,又需要将他上面n-2个圆盘移动第一根柱子上。
第四步:根据上面几步,我们发现,每当第Pn这个圆盘移动一次,第Pn-1这个圆盘都要移动两次,移动Pn前一次,移动Pn后一次;每移动第Pn-1时,Pn-2也移动两次,后面依次类推。这样:
Tn = 2Tn-1 + 1
第五步:根据第四步,我们还可以总结出每个盘子移动的次数,前提:
Pn = 1 = 2^0
Pn-1= 2 = 2^1
Pn-2 = 4 = 2^2
Pn-3 = 8 = 2^3
Pn-4 = 16 = 2^4
P1 = 2^(n-1)
Pn-n = 0
第六步:根据第五步得出:
Tn = 2^0 + 2^1 + 2^2 + 2^3 ....... 2^(n-1)+0 = 2^n - 1