自动断线机怎么调针吗:C语言的汉诺塔问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/01 17:21:48
#include "stdio.h"
main()
{void hanoi(int,char,char,char);
int m;
printf("input the number of disks:");
scanf("%d",&m);
printf("The step to moving %d disks:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char a,char b,char c)
{void move(char,char);
if(n==1) move(a,c);
else
{hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}
void move(char x,char y)
{printf("%c-->%c\n",x,y);
}
递归调用怎么看不懂呢?
谁能说一下hanoi函数里面的那三步调用是怎么实现的的吗?

呵呵
你可以这样理解
hanoi(n-1,a,c,b); // 把剩余n-1个从A通过C移动到B
move(a,c); // 从A移动到C
hanoi(n-1,b,a,c); // 把剩余n-1个从B通过a移动到C
这是递归
你可用模拟压栈方式解,画个图,
比如说
honoi(3,a,b,c) (1)-> honoi (2,a,c,b) -> honoi(1,a,b,c) ....
(2)-> honoi (2,b,c,a) -> honoi(1,b,a,c) ....

#include <iostream.h>

void Move(int n,int a,int b,int c)
{
char x=a;y=c;
if(n==1)
cout<<x<<"-"<<y<<endl;
else{
Move(n-1,a,c,b);
cout<<x<<"-"<<y<<endl;
Move(n-1,b,a,c);
}

void main()
{
Move(5,'a','b','c');
}

魔法师 四级 还不会??