关于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的? 展开
#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的? 展开
1个回答
展开全部
根据你的程序 当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的值
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的值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询