汉诺塔递归 C语言 代码简洁
生活随笔
收集整理的這篇文章主要介紹了
汉诺塔递归 C语言 代码简洁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<stdio.h>
void hannuota(int n,char A,char B,char C)
{if(1==n) printf("將編號為%d的盤子從%c柱子移動到%c柱子\n",n,A,C);else{hannuota(n-1,A,C,B);printf("將編號為%d的盤子從%c柱子移動到%c柱子\n",n,A,C);hannuota(n-1,B,A,C);}
}
int main()
{char ch1='A';char ch2='B'; char ch3='C';int n;printf("請輸入要移動盤子的個數:");scanf("%d",&n);hannuota(n,'A','B','C');return 0;
}
漢諾塔自然語言:
如果是1個盤子(即最后的遞歸最后一步
? ? ?直接將A柱子上的盤子從A移動到C
?否則
? ? ?先將A柱子上的n-1個盤子借助C移動到B
? ? ?直接將A柱子上的盤子從A移動到C
? ? ?最后將B柱子上的n-1個盤子借助A移動到C
思考:
1> 今天再次看這個代碼,緩了一會有點懵(沒看懂輸出,原來輸出也是在遞歸里,所以先看到的輸出代碼是最后輸出的,即一直遞歸下去,最后遞歸到n==1的時候先輸出if(1==n)的那行代碼(沒毛病,整個人順暢了))
2>再次遇到遞歸的題目的時候,可以按照這個思路,先把自然語言寫出來,再代碼實現。
如果直接寫代碼的話,我可能會陷入遞歸思路的不解之中(菜勿噴),對著自然語言直接寫代碼,不用管里面的遞歸邏輯就很nice
漢諾塔是看郝斌老師學習的,上圖的最后一句話!
(郝斌老師漢諾塔->?【郝斌】-數據結構入門_嗶哩嗶哩_bilibili)
22年3月12日 又來 發現之前寫的有問題
(已經改正確了,我之前把這里的ABC加上了' ')
?
遞歸函數里面的? 形參不用加? '? '??
只有main里那個需要加 ' ',只是形參和實參一樣了 ,有些迷惑性。改成
也可。? 這樣看來被調用函數內的參數是一類,所以不用加' '了 (x,y,z就是char類型)
?
總結
以上是生活随笔為你收集整理的汉诺塔递归 C语言 代码简洁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱奇艺VIP涨价幅度高达50%,光靠涨价
- 下一篇: ERP词汇中英文对照