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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汉诺塔-递归算法深入理解

發(fā)布時間:2025/1/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉诺塔-递归算法深入理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

漢諾塔算法就3個步驟:

第一,把a上的n-1個盤通過c移動到b;

第二,把a上的最下面的盤移到c;

第三,因為n-1個盤全在b上了。

所以把b當做a重復以上步驟就好了。不過,思考過程還是很痛苦的,難以理解。遞歸中會保存數(shù)據(jù)的好處在這里又得到體現(xiàn)。

遞歸算法真的是個神奇的東西,它會自己在棧中記錄下以前的數(shù)據(jù),可以按照以前的記錄返回到起始點。(重點理解遞歸中局部變量的保存)

漢諾塔代碼如下:

#include<stdio.h>void move(int n,char a,char b,char c) {if(n==1)printf("\t%c->%c\n",a,c); //當n只有1個的時候直接從a移動到celse{move(n-1,a,c,b); //第n-1個要從a通過c移動到bprintf("\t%c->%c\n",a,c);move(n-1,b,a,c); //n-1個移動過來之后b變開始盤,b通過a移動到c,這邊很難理解} }main() {int n;printf("請輸入要移動的塊數(shù):");scanf("%d",&n);move(n,'a','b','c'); }

參考:http://www.cnblogs.com/ruofengzhishang/articles/1939444.html


總結(jié)

以上是生活随笔為你收集整理的汉诺塔-递归算法深入理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。