hanoi塔栈递归算法c语言,c++递归函数,c语言递归算法经典实例
c++遞歸函數,c語言遞歸算法經典實例
一、什么是遞歸算法
遞歸即遞推+回歸。遞歸算法是把問題轉化為規模縮小了的同類子問題,然后遞歸調用函數(或過程)來表示問題的解。
二、遞歸算法的特點
1.必須有 遞歸函數 +遞歸出口
2.遞歸算法解題通常顯得簡潔,但效率較低且系統通過棧來儲存每一層的返回點、局部變量,遞歸次數過多容易造成棧溢出。
三、如何編寫遞歸函數
例:Hanoi 塔(問題內容不再贅述)
我們以三個圓盤(從小到大依次成為1,2,3號)三根柱子(A,B,C)為例:
想要將 3號 移至C柱
step1. 借助C把1、2號盤移到B;
step2. 將3號盤移至C;
想要將 2號? 移至 C 柱 則用上述同樣的思想? ? ?(遞歸函數的內涵所在,將大問題逐個分解為相同小問題)
step1. 借助C 將 1號盤 移至 A柱/*這里可以直接將 1號盤移至A,但如果 B盤上不止一個盤則需要借助C ,我這里是 按整體規律來寫*/
step2.? 將 2號盤 移至 C;
最后將 1號盤 移至 C柱
Hanoi塔 解題步驟:
1.將 A 上 n-1 個盤子移到B (借助C)
2.把 A 上 剩下的盤子移到C
3.將 n-1 個盤子從B 移到 C (借助A)
!!!
不用死記A B C在各個盤移動時的站位,將他們想成
初始柱? 過渡柱? 目標柱這樣在敲代碼時思路會清晰一些
代碼實踐:
#include
using namespacestd;void move(char x1, charx2) {
cout<< x1 << "-->" << x2 <
}//A、B、C三個位置依次對應 初始柱/ 過渡柱/ 目標柱【是對應的位置對應各種柱子(初始、過渡、目標柱) 不是ABC字母對應】void hanoi(int n, char A, char B, charC) {if (n == 1)
move(A, C);else{
hanoi(n- 1, A, C, B); //A為初始柱 C為過渡柱 B為目標柱
move(A, C);
hanoi(n- 1, B, A, C); //B為初始柱 A為過渡柱 C為目標柱
}
}intmain() {
cout<< "輸入盤子數:";intp;
cin>>p;char A = 'A', B = 'B', C = 'C';
hanoi(p, A, B, C);return 0;
}
----------------------------------------------------小分割線----------------------------------------------
注意遞歸算法的兩個必要條件遞歸出口和遞歸函數
認真分析如何將大問題分解為子問題
這些需要多加練習~
==============================大分割線=========================
如有錯誤還是希望評論指正 :)
http://www.dengb.com/cjjc/1368429.htmlwww.dengb.comtruehttp://www.dengb.com/cjjc/1368429.htmlTechArticlec++遞歸函數,c語言遞歸算法經典實例 一、什么是遞歸算法 遞歸即 遞推+回歸 。遞歸算法是把問題轉化為規模縮小了的同類子問題,然后遞...
總結
以上是生活随笔為你收集整理的hanoi塔栈递归算法c语言,c++递归函数,c语言递归算法经典实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用MAP文件快速定位程序崩溃代码行(转
- 下一篇: MVC(温习深入)