递归-Hanio塔问题

直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。

简单的算法:假设塔座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上。

posted @ 2014-04-07 22:30  场者  阅读(1120)  评论(0编辑  收藏  举报