Presentation is loading. Please wait.

Presentation is loading. Please wait.

11 Ch05 遞迴 淡江大學 周清江 1. 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2)

Similar presentations


Presentation on theme: "11 Ch05 遞迴 淡江大學 周清江 1. 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2)"— Presentation transcript:

1 11 Ch05 遞迴 淡江大學 周清江 1

2 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2) * (n-3) * … * (n-(n-2)) * (n-(n-1)) = n * (n-1) * (n-2) * (n-3) * … * 2 * 1 1. 階乘函數一直自己呼叫自己,且引數依序由 n 、 n-1 、 n-2 、 … 逐次遞減。 2. 當引數等於 1 時停止遞迴呼叫。 5.1 前言

3 3 遞迴與非遞迴之比較 //-------------------------------------- // n 階層函數,採用遞迴演算法 //-------------------------------------- long factorial (int n) { if (n == 1) return 1; else return n * factorial(n-1); } //------------------------------------- // n 階層函數,採用 for 迴圈 //------------------------------------- long factorial (int n) { long f = 1; for(int i = n; i > 1; i--) f = f * i; return f; } 概念較清楚,但較慢

4 4 5.2 如何設計遞迴程式 1. 確定函數名稱 2. 確定函數參數及其型 別 ( 含傳回值的部份 ) 3. 確定何時遞迴呼叫 4. 確定遞迴呼叫時之引 數值 5. 確定何時終止遞迴呼 叫 ( 即直接 return) 6. 確定遞迴呼叫時之回 傳值 //-------------------------------------- // n 階層函數,採用遞迴演算法 //-------------------------------------- long factorial (int n) { if (n == 1) return 1; else return n * factorial(n-1); }    

5 5 遞迴範例 ( 參考課本第 5 章及複習 4)  以下請自己練習  計算 2 n  計算 費氏數列  利用輾轉相除法求兩整數之最大公因數  我們將說明以下範例  排列組合 (ch5_r_permutation.java)  河內塔 (ch5_r_hanoi.java)

6 6 5.4.3 排列組合 ( 基礎 ) 先讓 a 、 b 、 c 分別 坐 1 、 2 、 3 號椅子 當 a 坐 1 號椅子, b, c 坐 2, 3 號椅子有 2 種坐法 ( 遞迴 ) 當 a 坐 2 號椅子, b, c 坐 1, 3 號椅子有 2 種坐法 ( 遞迴 ) 當 a 坐 3 號椅子, b, c 坐 1, 2 號椅子有 2 種坐法 ( 遞迴 ) : : : : : : : : 可將此做法擴充至 4 張椅子

7 7      主程式: 設定陣列 x 後,呼叫 p.r_permutation(x, 0, x.length-1)

8 8 5.4.5 河內塔 ( 問題定義在課本 4.3.4 節 )

9 9

10 10

11 11 由遞迴的觀點

12 12


Download ppt "11 Ch05 遞迴 淡江大學 周清江 1. 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2)"

Similar presentations


Ads by Google