汉诺塔问题
场景一:
有三根杆子A,B,C。A杆上有N个(N>=1)圆盘,盘的尺寸由下到上依次变小。
把A上的圆盘从下面开始按大小顺序重新摆放在C柱子上。并且规定,在小圆盘上不能放在大圆盘上,在三根柱子之间一回只能移动一个圆盘。
对于任意N,最少要移动多少次?
使用数学归纳法
当N为1时,需要1次
当N为2时,A–>B, A–>C, B–>C, 需要3次
当N为3时,A–>C, A–>B, C–>B, A–>C, B–>A, B–>C, A–>C, 需要7次
…
假设sum(n) = 2^n – 1
对于sum(n+1),先将A上编号为1…n盘子通过C移到B需要sum(n)次;然后在将第(n+1)号从A移到C上,
最后在将B上的 编号为1…n盘子通过A移到C上需要sum(n)次。
所以,sum(n+1) = sum(n) + 1 + sum(n) = 2*(2^n -1) + 1 = 2^(n+1)-1
场景二:
有三根杆子A,B,C。A杆上有N个(N>=1)圆盘,盘的尺寸由下到上依次变小。
把A上的圆盘从下面开始按大小顺序重新摆放在C柱子上。并且规定,在小圆盘上不能放在大圆盘上,在三根柱子之间一回只能移动一个圆盘。
对于任意N,编号为i的盘子最少要移动多少次?
使用数学归纳法
当N为1时,编号1移动1次
当N为2时,A–>B, A–>C, B–>C, 编号1移动2次,编号2移动1次
当N为3时,A–>C, A–>B, C–>B, A–>C, B–>A, B–>C, A–>C, 编号1移动4次,编号2移动2次,编号3移动1次
…
假设sum(n,i) = 2^(n-i)
对于sum(n+1,i),先将A上编号为1…n盘子通过C移到B;然后在将第(n+1)号从A移到C上,
最后在将B上的 编号为1…n盘子通过A移到C上需要。
发现编号为1…n移动的次数都增加为原来的2倍,编号为n+1只需要移动一次
所以,假设成立