直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。
简单的算法:假设塔座a、b、c排成一个三角形,a-b-c-a构成顺时针循环,在移动圆盘的过程中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的下一个塔座上;若是偶数次移动,则保持最小的圆盘不动,而在其他两个塔座之间,将较小的圆盘移动到另一个塔座上去。
使用递归算法实现如下
1 void hanoi (int n,int a ,int b, intc) 2 { 3 if(n>0){ 4 hanoi(n-1,a,c,b); 5 move(a,b); 6 hanoi(n-1,c,b,a); 7 } 8 }
hanoi(n,a,b,c)表示将塔座a上自下而上,由大到小叠放在一起的个圆盘依移动规则移至塔座b上并按同样的顺序叠放。在移动的过程中,以塔座c作为辅助塔座。move(a,b)表示将塔座a上编号为n的圆盘移至塔座b上。
原文:http://www.cnblogs.com/hans-boos/p/3650953.html