个人理解,递归的思想就是把一个大的问题化成与之形式相同的小问题。递归的形式千变万化,只有看过一定数量的代码之后才能想到,原来问题竟然可以这样解决!在某多数情况下,递归和循环有相似之处:都是执行相似的代码段,都有终止的条件。但是循环的形式相对固定,而递归的形式却十分灵活多变,需要有较活跃的思维才能想到。
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
要把n个圆盘从一个柱子(StartTower)搬到另一个柱子(EndTower)上,并满足题目的要求,需要借助空闲的柱子(SpareTower)。由于实现n个圆盘的搬移不太容易,可以换个角度思考,把n个圆盘分成1个和(n-1)个圆盘;这(n-1)个圆盘已经排好了顺序,利用3根柱子可以很容易地把这两组圆盘从一个柱子搬移到另一个柱子上。再把(n-1)个圆盘分成1个圆盘和(n-2)个。。。。。。每一个问题都与前一个问题类似,并且规模逐渐缩小,