#include<stdio.h>
main()
{
  hanoi(3,'A','B','C');
}hanoi(n,a,b,c)
int n;
char a,b,c;
{int i=1;
if(n==1) printf("%c=>%c\n",a,c);
  else
  {
  hanoi(n-1,a,c,b);
     printf("%c=>%c\n",a,c);
 hanoi(n-1,b,a,c);
  }
}
 这是一个汉诺塔的递归调用的实例。有些许看不懂。比如说为什么这里的 hanoi(n-1,a,c,b);为什么表示把n-1个盘子从a借助c移到b?求大神的解释!递归C

解决方案 »

  1.   

      hanoi(n-1,a,c,b);
         printf("%c=>%c\n",a,c);
     hanoi(n-1,b,a,c);这一句很重要
    先是把a 给c 然后你看 hanoi(n-1,b,a,c);
    通过c 置换 即a原来的移动到b 上去了啊
      

  2.   

    要倒过来想,比如n=10 那么你先想n=1的时候是什么情况,
    n=2
    n=3
    ....
      

  3.   

    你不能直接去考慮n-1個盤子的問題
    因為 hanoi(n-1,b,a,c) 是遞歸調用,他會一直調用到n-1 = 1的情況然後再依次返回結果
    所以你要去想n=2 n=3 n=4 .... n = n
    你可以去學習一下棧,然後可能會更好的幫助你理解遞歸問題