- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
资料结构简介 周清江副教授 淡江大学
* * Ch05 遞迴 淡江大學 周清江 * * 遞迴函數乃是一個自己反覆呼叫自己的函數 一個典型的遞迴演算法 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 前言 * 遞迴與非遞迴之比較 //-------------------------------------- // 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; } 概念較清楚,但較慢 * 5.2 如何設計遞迴程式 確定函數名稱 確定函數參數及其型別(含傳回值的部份) 確定何時遞迴呼叫 確定遞迴呼叫時之引數值 確定何時終止遞迴呼叫(即直接 return) 確定遞迴呼叫時之回傳值 //-------------------------------------- // n階層函數,採用遞迴演算法 //-------------------------------------- long factorial (int n) { if (n == 1) return 1; else return n * factorial(n-1); } ? ? ? ??? * 遞迴範例(參考課本第 5 章及複習4) 以下請自己練習 計算 2n 計算 費氏數列 利用輾轉相除法求兩整數之最大公因數 我們將說明以下範例 排列組合 (ch5_r_permutation.java) 河內塔 (ch5_r_hanoi.java) * 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 張椅子 * ? ? ? ? ? 主程式: 設定陣列 x 後,呼叫 p.r_permutation(x, 0, x.length-1) * 5.4.5 河內塔(問題定義在課本 4.3.4 節) * * * 由遞迴的觀點 * 作業 1. 寫出第 2.5.2 節 (4 x 4) 的魔術方塊 2. 二項式係數可以遞迴方式定義如下: C(N, 0) = 1 C(N, N) = 1 C(N, k) = C(N-1, k) + C(N-1, k-1) 0 k N 請以遞迴寫出此函式,並以 C(4, 2) 及 C(5,3) 驗證 3. 請以遞迴方式一個整數陣列裡所有元素的最大值,此題之概念為將要比較的陣列元素分為前半跟後半,以遞迴方式分別求出前半及後半的最大值 first、second,最後 first 及 second 相比,較大的即為此陣列最大值。並以一個整數陣列驗證。(註:當要比的元素只剩 1 個或 2 個時就不需要遞迴呼叫了) *
原创力文档


文档评论(0)