直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。算法
简单的算法:假设塔座a、b、c排成一个三角形,a-b-c-a构成顺时针循环,在移动圆盘的过程当中,如果奇数次移动,则将最小的圆盘移动到顺时针方向的下一个塔座上;如果偶数次移动,则保持最小的圆盘不动,而在其余两个塔座之间,将较小的圆盘移动到另外一个塔座上去。函数
使用递归算法实现以下spa
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上。code