日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汉诺塔递归 C语言 代码简洁

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉诺塔递归 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语言 代码简洁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。