关于C语言汉诺塔的理解求帮助

源代码:#include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);//对hanoi函数的声... 源代码:

#include <stdio.h>
int main()
{
void hanoi(int n,char one,char two,char three); // 对hanoi函数的声明
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');
}

void hanoi(int n,char one,char two,char three) // 定义hanoi函数
// 将n个盘从one座借助two座,移到three座
{
void move(char x,char y); // 对move函数的声明
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

void move(char x,char y) // 定义move函数
{
printf("%c-->%c\n",x,y);
}
假设n=3,else下面的应为:
2 A C B
1 A B C

之后就执行if(n==1)了,它还怎么执行
move(one,three);
hanoi(n-1,two,one,three);
}
}
这半部分?
另外 它怎么能打印出 C-->B的?
展开
 我来答
windkni
2014-03-23 · TA获得超过387个赞
知道小有建树答主
回答量:251
采纳率:100%
帮助的人:235万
展开全部
根据你的程序 当n=3 不满足n=1条件 所以走else 然后执行
hanoi(n-1,one,three,two); // 2 A C B
move(one,three); //调用move函数 输出 c-->B
hanoi(n-1,two,one,three); // 1 A B C
至于你说为什么此时n=1不执行if(n==1)是因为你的程序if和else没有在一个循环中,程序只会判断一次,如果你加一个while(n-1!=0)或者for循环在if前面才会不停检验n的值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式