发布网友 发布时间:2024-10-22 09:48
共4个回答
热心网友 时间:2024-11-08 13:56
hanoi函数没问题,功能是把n个盘子从A挪到C上去,把B当作中转的盘子。追答#include
#include
//你要先理解汉诺塔的模型
//面前从左到右分别是A,B,C这3个位置
//我把你主函数改了,假设n个盘子在A,要全部挪到C去
//将n个盘子从“位置from”挪到“位置to”上
//需要的话,用中间的“位置buffer”中转
int hanoi(int n, char from, char buffer, char to) {
if(n == 1) {
//将1一个盘子从“位置from”挪到“位置to”,就可以直接挪动
printf("Move sheet %d from %c to %c\n", n, from, to);
//挪完了,本次递归就要返回上一层
return 0;
}
else {
//有n个盘子需要从“位置from”挪到“位置to”
//利用递归,将上面n-1个盘子,先挪到“位置buffer”
hanoi(n-1, from, to, buffer);
//上面的n-1个盘子已经都放到“位置buffer”
//所以将第n个盘子,直接挪到 “位置to”
printf("Move sheet %d from %c to %c\n", n, from, to);
//但是现在上面n-1个盘子还都在“位置buffer”
//需要把它们放到最终的位置上
hanoi(n-1, buffer, from, to);
//返回调用本函数的地方
return 0;
}
}
int main(int argc, char *argv[])
{
int n;
printf("input number of the plates:");
scanf("%d",&n);
while(n){
hanoi(n, 'A', 'B', 'C');
printf("请输入盤数:");
scanf("%d", &n);
}
system("PAUSE");
return 0;
}
热心网友 时间:2024-11-08 13:56
首先知道第一次调用时,就是hanoi(n, 'A', 'c', 'b'); 这里的函数hanoi(int n, char A, char B, char C)中的n=2,A='A',B='c',C='b'。这时进入执行的是else中的hanoi(n-1, A, C, B);这是第二次调用,这里的函数hanoi(int n, char A, char B, char C)中的n=1,A='A',B='b',C='c',这事进入执行的是if(n==1)语句输出1,a to c,然后跳出这次调用,执行下一个语句printf("Move sheet %d from %c to %c\n", n, A, C);
热心网友 时间:2024-11-08 13:57
函数传参数问题热心网友 时间:2024-11-08 13:57
看不懂