汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。 问应该如何操作?
这道题我们采用递归的思想来解决
递归的四条基本法则:
1.基准情形。必须有某些基准情形,它无需递归就能解出。
2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进。
3.设计法则。假设所有的递归调用都能运行。
4.合成效益法则。在求解同一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作
关于递归:一定不要试图追踪大型递归的过程,关键是找出递归的方程式:也就是说要完成最后一步,那么最后一步的前一步要做什么。
(先进后出思想)在求f(n, other variables)的时候,你就默认f(n -1, other variables)已经被求出来了——至于怎么求的,这个是计算机通过回溯求出来的
如果只有一个圆盘,我们的解决很简单,将圆盘从A柱子移动到C柱子
如果是两个圆盘