求各路大神帮忙把n=2时的程序用语言描述走一遍!

c语言汉诺塔问题如下:
#include <stdio.h>
char move (char x, char y);
char hanoi(int n,char a, char b, char c);
int main()
{int n;char a,b,c;
a='A';b='B';c='C';
scanf("%d",&n);
hanoi (n,a,b,c);
}
char hanoi(int n,char a,char b, char c)
{if (n==1)
{ move(a,c); }
else { hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);}
return;
}
char move(char x,char y)
{ printf("%c->%c\n",x,y);}

小怪兽爱吃肉
浏览 102回答 2
2回答

慕娘9325324

两个盘子,1表示小的,2表示大的。(第一层)调用hanoi(2,a,b,c), n==1 不满足,执行else子句(进入第二层的调用),(第二层)调用hanoi(1,a,c,b),此时满足n==1, 执行move(a,c),(因为此时的c为上次调用传进来的b)即将a柱子上1号盘子移动到b柱子上,返回,(第二层)执行move( a, c),即将a柱子上2号盘子移动到c柱子上,(第二层)调用hanoi(1,b,a,c),进入函数后满足n==1执行move(a,c),(此时的a为上次传进来的B),所以将b柱子上的1号盘子移动到c柱子上。只要看清楚对应关系就能搞清楚

叮当猫咪

汉诺塔问题是一个递归的经典例子,基本上不用递归不知道如何编程实现。问题就是从桩子1移到桩子3,借助桩子2.移动N个盘子共移动多少次。此问题递归解法的解释就是:先从1移到2,借助3,移动N-1个盘子。此时1上还有一个盘子。即 hanoi(n - 1, one, three, two);可以直接将一个盘子移到3 move(one, three);然后将剩余的在2上的N-1个盘子移到3上,借助1 hanoi(n - 1, two, one, three);这里的1、2、3对应你上面的代码就是ABC
打开App,查看更多内容
随时随地看视频慕课网APP