递归问题,继续各位帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/22 05:48:40
move(int m,int x,int y,int z)
{
if(m==1)
printf("%c----->%c\n",x,z);
else
{
move(m-1,x,z,y);
printf("%c---->%c\n",x,z);
move(m-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number: \n");
scanf("%d",&h);
printf("the step to move %2d diskes: \n",h);
move(h,'a','b','c');
}
这里的h假如是3,那么该程序执行的过程是什么?(最主要的是该函数递归的过程是什么)

h=3,调用函数f1(m,a,b,c),调用的结果
m=3,x=a,y=b,z=c
m-1=2,再调用那个函数f2(m,a,c,b),这叫地归,调用的结果
m=2,x=a,y=c,z=b
m-1=1,再调用那个函数f3(m,a,b,c),调用结果
m=1,x=a,y=b,z=c
打印a——>c,返回调用的f2(m,a,c,b)下一行printf("%c---->%c\n",x,z);
打印a——>b,m=1又开始调用f4(m,c,a,b),调用结果
m=1,x=c,y=a,z=b,
打印c——>b,返回调用的f1(m,a,b,c)下一行printf("%c---->%c\n",x,z);
打印a——>c,m=2又开始调用f5(m,b,a,c),调用结果
m=2,x=b,y=a,z=c,
m-1=1,调用f6(m,b,c,a),调用结果
m=1,x=b,y=c,z=a
打印b——>a,返回调用的f5(m,b,a,c)下一行printf("%c---->%c\n",x,z);
打印b——>c,m=1又开始调用f7(m,a,b,c)
打印a——>c。程序结束。

abc-cba-cab-bac-bca-acb-abc-cba

不知道在递归什么东西。一般简单的递归只来回一次,这个居然来回好几次。