hanoi塔里面不懂的地方。望解答。

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:15:22
#include <stdio.h>
void main()
{
void hanoi(int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %d diskes:\n",m);
hanoi(m, 'A','B','C');
}

void hanoi(int n,char one,char two,char three)
{
void move(char x,char y);
if(n==1) ①
move(one,three);
else
{
hanoi(n-1,one,three,two); ②
move(one,three); ③
hanoi(n-1,one,three,two); ④
}

}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}

谭浩强那本书里的,貌似讲的很详细,但是我就是不懂,可能是我太笨。
我的问题是:
void hanoi(int n,char one,char two,char three)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(

if(n==1) ①

move(one,three);

else

{

hanoi(n-1,one,three,two); ②

move(one,three); ③

hanoi(n-1,two,one,three); ④ //你的程序这里似乎是写错的。

给你画了个图看递归运行的过程。虽然还是不抱太大希望能讲明白……

递归跟数学上的数学归纳法类似。

n=1的时候,hanoi(1,A,B,C)能成功将一个盘子从A经过B移到C.

假设n-1时,hanoi(n-1,A,B,C)能成功将n-1个盘子从A经过B移到C.

那么,n时,hanoi(n,A,B,C)首先调用hanoi(n-1,A,B,C),

将上面n-1个盘子从A经过C移到B上(这一点在假设里已经满足)

也就是hanoi(n-1,one,three,two); ②;

然后将最下面一个盘子从A移到C,也就是move(one,three); ③

最后将刚才那n-1个盘子从B经过A移到C上,

也就是hanoi(n-1,two,one,three); ④,

这一点也是假设条件,也能成功。

所以得证,n为任意整数时,调用hanoi(n,A,B,C)就可以把n个盘子从A经过B运到C上去。

你要跟着程序把整个移动3个盘子的过程跟踪一遍就好懂了。如果还是不行,就找个身边的懂的人讲讲。

祝你成功~毕竟递归还是程序设计中很重要的一个部分。

hanoi塔的c语言代码 急!Hanoi塔问题的动画演示 HANOI塔问题的头文件 4阶Hanoi塔问题 4柱hanoi塔问题 请教下Hanoi塔问题 不懂的地方 用递归的方法编写 Hanoi塔问题,观察递归调用过程 C程序问题,谁知道hanoi塔每步执行的说明 有谁知道hanoi庙的来历