堆疊在計算機領域的應用相當廣泛, 主要特性是它限制了資料的插入與刪除的位置與方法, 屬於有序串列應用. 至於它的應用可簡單列舉如下 :
遞迴 :
遞迴 (Recursion) 在程式設計上是相當好用而且重要的概念. 使用遞迴可使程式變得簡潔, 但是設計時必須相當小心, 因為一不注意就會造成無窮迴圈或導致記憶體的浪費. 簡單的來說, 如果一個程式能被自己所定義或呼叫, 就稱為遞迴程式. 有些語言如 Fortran, Basic, COBOL 等並不具備遞迴功能. 原因是這些語言在編譯時就得決定所有相關資訊.
至於像 C/C++ 等語言則可以使用遞迴功能, 因為他們的繫結時間可以延遲到執行時才動態決定. 只要程式語言具備遞迴功能, 任何能使用迴圈敘述 (for 或 while) 寫成的程式, 都能以遞迴成式取代. 例如 n! 的值就是一個很好的遞迴程式應用. 所謂 n! (n factorial) 就是 n 與 1 之間所有的正整數的乘積. 如 5!=5x4x3x2x1. 而 0! 定義為1.
範例代碼 :
在函式 ch04_04 使用迴圈計算 n! 的值, 而在 ch04_05 使用遞迴計算 n! 的值 :
* ch04.h 代碼 :
- /*
- * 以 for 迴圈計算 0-i 階層值
- */
- int ch04_04(int i, bool b);
- /*
- * 以遞回取代 for 迴圈計算 0-i 階層值
- */
- int ch04_05(int i, bool b);
- int ch04_04(int i, bool b) {
- if(b) {
- if(i==1) {
- return 1;
- } else {
- int sum=1;
- for(int j=1; j<=i; j++) {
- sum = sum * j;
- }
- return sum;
- }
- }
- return -1;
- }
- int ch04_05(int i, bool b) {
- if(b) {
- if(i==1){
- return 1;
- } else {
- int sum = 1;
- sum = i * ch04_05(i-1,b);
- return sum;
- }
- }
- return -1;
- }
- cout << "計算4 階層的值: (使用 for 迴圈)" << endl;
- int sum = ch04_04(4, b);
- cout << "結果為=" << sum << endl;
- cout << "計算4 階層的值: (使用遞迴)" << endl;
- sum = ch04_05(4, b);
- cout << "結果為=" << sum << endl;
執行結果 :
補充說明 :
* [ 資料結構 小學堂 ] 堆疊 : 認識堆疊
沒有留言:
張貼留言