Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.