汉洛塔是古印度神话产生的智力玩具,他的玩法是,有三个柱子分别为A,B,C,A柱上面有n个盘子上面小下面大堆叠放在一起,现在要求激将A柱上的盘子全部移到C柱上面,并且一次只能移动一个盘子,必须是小盘在大盘的上面。现在要求用C语言递归来完成,并统计递归调用的次数。
这个实现是递归的强大功能的体现,废话不多说,请看源码:
#include<stdio.h>
void move(int n,int *cnt,char A,char B,char C)
{
if(n==1)
{
printf("%d号盘:%c-->%c\n",n,A,C); //如果还剩一个盘或者只有一个盘时,直接将1号盘移到C柱
(*cnt)++; //递归调用次数加1
}
else
{
move(n-1,cnt,A,C,B); //将n-1个盘从A柱上借助于C柱移到B柱上
printf("%d号盘:%c-->%c\n",n ,A,C); //当将n-1个盘移到B柱成功时直接将A柱上的盘移到C柱
move(n-1,cnt,B,A,C); //再次将n-1个盘从B柱上借助于A柱移到C柱上
(*cnt)++; //递归调用次数加1
}
}
int main(void)
{
int h;
int cnt = 0;
printf("\ninput number:\n");
scanf("%d",&h);
printf("the step to moving %2d diskes:\n",h);
mo