递归挺重要的,一定要会
对于汉诺塔的理解,其实是很简单的,但是感觉也挺经典的:假设one,two,thr三个支柱,要将第一个支柱上的n个盘子移到第三个上,输出移动的顺序;
1.其实也就是将n-1个盘子借助thr移到two上,
2.然后将one上的第n个盘子移动到thr上;
3.然后将two上的n-1个盘子移到thr上;
而对于n-1个盘子如何来进行移动,则就属于递归调用了。
#include<stdio.h>
void move(char x,char y);
void hano(int n,char one,char two,char thr);
int main()
{
int m;
printf("panzigeshu:\n");
scanf("%d",&m);
printf("yidongbuzhou:\n");
hano(m,‘A‘,‘B‘,‘C‘);
return 0;
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hano(int n,char one,char two,char thr)
{
if(n==1)
{
move(one,thr);
}
else
{
hano(n-1,one,thr,two);
move(one,thr);
hano(n-1,two,one,thr);
}
}
时间: 2024-11-07 19:26:08