Hanoi(汉诺)塔问题。这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上(见图8.13)。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求编程序打印出移动的步骤。
资料上给出的程序如下:分析:(将n个盘子从A座移到C座可以分解为以下3个步骤:
(1) 将A上n-1个盘借助C座先移到B座上。
(2) 把A座上剩下的一个盘移到C座上。
(3) 将n-1个盘从B座借助于A座移到C座上。
)
程序:
#include <stdio.h>
void 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 moveing %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);
}
运行情况如下:
input the number of diskes:3↙
The steps to noving 3 diskes:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
我想问的是,在这几句中:
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); }
}
到底是怎么调用的,形实参的传递是如何执行的。特别是两个hanoi函数的形实参值的传递,我被这程序搞糊涂了,我怎么也想不通这个程序会达到题目中所要求的那样,请高手们帮帮我的忙,详细解释、分析一下程序的执行,请务必详细!!!!当然,若能说一下程序的构思就更好了!!!!!!
汉诺塔问题,请高手帮忙,解释清楚!!!本人很无奈!!!c语言中最不清楚的就是汉诺塔问题!!!!!!!但一直没得到解决!