请教汉诺塔递归问题
move(int n,int a,int b,int c){
if(n==1)
printf("%c-->%c\n",a,c);
else
{
move(n-1,a,c,b); /*n=1,a=A,b=C,c=B*/
printf("%c-->%c\n",a,c);
move(n-1,b,a,c); /*n=1,a=B,b=A,c=C*/
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",&h);
printf("the step to moving %d disks:\n",h);
move(h,'A','B','C');
getch();
}
自定义函数部分比较难理解,是不是进栈和出栈的问题。
特别是 move(n-1,a,c,b); /*n=1,a=A,b=C,c=B*/
printf("%c-->%c\n",a,c);
假设n=2(就是A柱上只有两个盘子),是不是先执行move(1,a,c,b),printf....然后执行move(2,a,c,b),printf......。这两步执行完后在执行下面那步move(n-1,b,a,c)。