- 1、本文档共59页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
支配定理法Mastertheoremmethod
Algorithms (Dr. Shi-Jay Chen, National United University) Course 2遞迴Recursion ▓ Outlines 本章重點 Def.與種類 Recursion與Non-recursion的比較 設計方式 遞迴演算法則的複雜度分析 數學解法 (Mathematics-based method) 替代法 (Substitution method) 遞迴樹法 (Recursion tree method) 支配定理法 (Master theorem method) ▓ Recursion Algorithm 一般來說,有兩種方式可以撰寫具有重覆執行 (Repetitive)特性的演算法: Iteration (迴圈) Recursion (遞迴) Def: algorithm 中含有self-calling (自我呼叫)敘述存在。 遞迴的種類: 直接遞迴 (Direct Recursion): 函式或程序直接呼叫本身時稱之。 間接遞迴 (Indirect Recursion): 函式或程序先呼叫另外的函式,再從另外函式呼叫原來的函式稱之。 尾端遞迴 (Tail Recursion): 屬於直接遞迴的特例 建議:用非遞迴方式會較有效率 即: 改用迴圈 (while…, repeat…until) ∵遞迴要花費額外的處理 (如: stack的push, pop,…) ▓ 遞迴演算法則的設計 找出問題的終止條件. 找出問題本身的遞迴關係. 遞迴的架構: 階乘 (Factorial; n!) Recursive Factorial Algorithm inputs: n is the number being raised factorially outputs: n! is returned Procedure Factorial(int n) begin if (n = 0) return 1; else return (n? Factorial(n-1)); end Write a program in C++ int Factorial(int n) { if (n==0) return (1); else return (n*Factorial(n-1)); } Iterative Factorial Algorithm inputs: n is the number being raised factorially outputs: n! is returned void Factorial(int n) { factN = 1; for (i=1, i ≤ n, i++) factN = factN * i; return factN; } 費氏數 (Fibonacci Number) Ex: 觀念: F0 + F1 ? F2 F1 + F2 ? F3 F2 + F3 ? F4 F3 + F4 ? F5 Recursive Algorithm Definition Recursive Fibonacci Algorithm inputs: num identified the ordinal of the Fibonacci number outputs: returns the nth Fibonacci number void Fib(int num) { if (num is 0 OR num is 1) return num; else return (Fib(num-1) + Fib(num-2)); } Based on recursive function, 求Fib (4) 共呼叫此函數幾次? (含Fib(4)) ? Ans: 9次 Iterative Fibonacci Number Algorithm inputs: num identified the ordinal of the Fibonacci number outputs: returns the nth Fibonacci number void Fib(int num) { if (num is 0 OR num is 1) return num; el
文档评论(0)