C語言用遞歸法實現漢諾塔


算法思想:(1)將A上的m-1個盤借助C移到B上

(2)將A上的最后一個大盤移到C上

(3)將B上的m-1個盤通過A移到C上

基於以上思想可以采用遞歸方法,將設需要移動n個盤,則總共需要移動2n-1次。

代碼如下:

 1 #include<stdio.h>
 2 void hanoi(int m,char one,char two,char three)
 3 {
 4     void move(char,char);              //定義move函數
 5     if(m==1)        //當m為1時直接將盤子從A移到C
 6         move(one,three);
 7     else                    //遞歸執行
 8     {
 9         hanoi(m-1,one,three,two);
10         move(one,three);
11         hanoi(m-1,two,one,three);
12     }
13 }
14 void move(char x,char y)       //用於展示執行過程
15 {
16     printf("%c-->%c\n",x,y);
17 }
18 int main()
19 {
20     int m;
21     char A,B,C;
22     printf("請輸入盤子數目:");
23     scanf("%d",&m);
24     hanoi(m,'A','B','C');
25 }

運行結果如下

 

 注意:因為移動次數是2的n次冪,所以每增加一個移動次數就會成倍增加,所以不要輸入太大的數,不然系統執行時間變長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM