乐高 42043 零件数:C语言汉诺塔的问题(思考了一整天也没想出来555)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/11 05:17:15
算法我已经弄的很明白了...标注在源程序中
可就是看不懂源程序(函数的递归调用)
这段程序到第怎么走的里?/*源程序在下面*/
我是这么想的~
程序首先从main()开始执行起
输入n变量的值为3
调用movedisk()函数 传入盘子数 n 以及A,B,C(三个针的代表符号)三个变量实参数
分别传给了movedisk()函数中的n A B C四个形参
步骤如下:
n=3; n>1所以调用自己 movedisk(n-1,A,C,B);[形式参数中的值依次变为了2 A C B]
n=2; n>1所以再一次调用自己 movedisk(n-1,A,C,B); [形式参数中的值依次变为了1 A B C]
n==1 所以执行

else
printf("Move disk 1 from post %c to post %c.\n",A,C);
即输出结果为 Move disk 1 from post A to post C
然后程序还怎么走里?偶觉得程序就结束拉。。。

#include<stdio.h>
movedisk(int n,char A,char B,char C)
{
if(n>1){
movedisk(n-1,A,C,B);/*1.将n-1个盘从A通过C移动到B*/
printf("Move disk %d from post %c to post %c.\n",n,A,C);
movedisk(n-1,B,A,C);/*3.再将n-1个盘从B通过A移动到C*/
}
else
printf("Move disk 1 from post %c to post %c.\n",A,C);
/*2.n==1 将A上的一个盘移动到C*/
}
main()
{
int n;
char A='A',B='B',C='C';
printf("Please input a digit of disk first:\n");
scanf("%d",&n);
movedisk(n,A,B,C);
}
运行过了~
我输入的是3不过是2^3-1=7个步骤
怎么就不能想出来?

你的程序运行过了吗
没运行过,结果是不可能想出来的