汉诺塔-递归算法深入理解
生活随笔
收集整理的這篇文章主要介紹了
汉诺塔-递归算法深入理解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
漢諾塔算法就3個(gè)步驟:
第一,把a上的n-1個(gè)盤通過c移動(dòng)到b;
第二,把a上的最下面的盤移到c;
第三,因?yàn)?/span>n-1個(gè)盤全在b上了。
所以把b當(dāng)做a重復(fù)以上步驟就好了。不過,思考過程還是很痛苦的,難以理解。遞歸中會(huì)保存數(shù)據(jù)的好處在這里又得到體現(xiàn)。
遞歸算法真的是個(gè)神奇的東西,它會(huì)自己在棧中記錄下以前的數(shù)據(jù),可以按照以前的記錄返回到起始點(diǎn)。(重點(diǎn)理解遞歸中局部變量的保存)
漢諾塔代碼如下:
#include<stdio.h>void move(int n,char a,char b,char c) {if(n==1)printf("\t%c->%c\n",a,c); //當(dāng)n只有1個(gè)的時(shí)候直接從a移動(dòng)到celse{move(n-1,a,c,b); //第n-1個(gè)要從a通過c移動(dòng)到bprintf("\t%c->%c\n",a,c);move(n-1,b,a,c); //n-1個(gè)移動(dòng)過來之后b變開始盤,b通過a移動(dòng)到c,這邊很難理解} }main() {int n;printf("請輸入要移動(dòng)的塊數(shù):");scanf("%d",&n);move(n,'a','b','c'); }
參考:http://www.cnblogs.com/ruofengzhishang/articles/1939444.html
總結(jié)
以上是生活随笔為你收集整理的汉诺塔-递归算法深入理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【已解决】Android5.0版本如何打
- 下一篇: Java是类型安全的语言,而C++是非类