首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手-老谭教材-汉诺塔有关问题求解

2012-12-31 
新手-老谭教材-汉诺塔问题求解!先上程序(比较简单,我初中生也看的懂):#includestdio.hvoid main(){void

新手-老谭教材-汉诺塔问题求解!
   先上程序(比较简单,我初中生也看的懂):

#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)
{
    printf("%c-->%c\n",x,y);
}


终于打完程序了!  我看的懂这个程序的算法,就是递归思想。但是我看不明白这个程序是怎么样一步一步输出结果的。
比如教程给的是:当 n=3 的时候,输出的答案是如下:

A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C

  我按照程序一步一步走的去读程序,但是他总是递归 我搞不定楚具体的流程,请大家指教下!
[解决办法]
三个柱:A,B,C
把N个盘子借助B借,从A柱移到C柱:
老师给的一个土办法,就这么给记信了:
1. 老和尚先叫小和尚把A柱上面的N-1个盘子借助C柱先移到B柱
2. 老和尚把第N个盘子从A柱移到C柱
3. 老和尚再叫小和尚把B柱上面的N-1个盘子借助A柱移到C柱

很关键一个词,借助

热点排行