C语言递归演示n阶hanoi塔问题
1、算法思想
通过递归调用实现
2、源代码
#include<stdio.h>
double steps=0;//全局变量,记录步数
int main()
{
//hanoi函数声明(注:先声明,后调用)
void hanoi(int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("the step to move %d diskes:\n",m);
hanoi(m,'A','B','C');
printf("\ntotal steps:%lf\n",steps);
return 0;
}
//n:碟片数 one:一号塔 two:二号塔 three:三号塔
//功能描述:将一号塔上的碟片借助二号塔移动到三号塔上
void hanoi(int n,char one,char two,char three)
{
void move(char x,char y);//move函数声明
if(n==1)
{
move(one,three);
}
else
{
hanoi(n-1,one,three,two);//将one座上的n-1个盘借助three移到two
move(one,three);
hanoi(n-1,two,one,three);//将two座上的n-1个盘借助one移到three
}
}
//从x塔上移动到y塔上
void move(char x,char y)
{
printf("%c-->%c\t",x,y);//移动x到y
steps++;
}
3、实现结果
输入1,测试结果如下
输入2,测试结果如下
输入3,测试结果如下
注:以上代码基于VC++6.0 IDE进行编辑