汉诺塔-递归算法深入理解
生活随笔
收集整理的這篇文章主要介紹了
汉诺塔-递归算法深入理解
小編覺得挺不錯的,現(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【已解决】Android5.0版本如何打
- 下一篇: Java是类型安全的语言,而C++是非类