- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chapter 6 遞迴 遞迴的基本觀念 遞迴:recursion,程式撰寫的重要技巧 特色: 函數以遞迴條件呼叫自己本身 必須加入終止條件,以免無窮的呼叫自己 增加可讀性,但是執行效率一般會比較差 某些程式語言沒有支援遞迴的程式撰寫 簡單的遞迴範例 遞迴設計 由上而下 top-down 原始問題可以切割成若干小問題 小問題與原始問題的“外觀”相同 小問題的資料量比原始問題縮小 Divide And Conquer 切割 分別處理 合併 遞迴呼叫的範例 間接遞迴 函數呼叫自己本身,稱為直接遞迴 兩個以上函數互相呼叫,形成一迴路,稱為間接遞迴 例如:A呼叫B,B呼叫C,C呼叫A 思考停止條件時較為複雜 遞迴函數的思考 系統使用一個stack紀錄每次呼叫的順序 撰寫遞迴函數: 找出遞迴條件 找出停止條件 trace遞迴函數: 由停止條件開始執行,找出執行的規則 將規則推廣至所有的情形 遞迴函數的例子 n!的計算 乘法的計算 a*b 河內塔問題(Tower of Hanoi) 最大公因數的計算 n!的計算 n! = 1 * 2 * 3 * ... * (n-1) * n 遞迴的條件 n! = n * (n-1)! 1! = 1 (這個理所當然的條件有什麼用?) 正式的條件 乘法的計算 a*b a * b 如何用加法的遞迴方式表示? 練習 寫出n!的遞迴計算程式 河內塔問題(Tower of Hanoi) 問題:p6-12 有三根柱子A、B、C 在A上面有n個盤子,由上而下編號1到n。考慮最簡單的情形 n=3 目標:將n個盤子搬到C 搬移限制: 每次只能搬移柱子最上面的一個盤子 在整個過程中,編號大的盤子不可以放在編號小的盤子上面 河內塔問題(Tower of Hanoi) 河內塔問題 - 3個盤子處理 將1號盤子從A搬到C 2號盤子從A搬到B 1號盤子自C搬到B 3號盤子搬到C 1號盤子從B搬到A 2號盤子從B搬到C 1號盤子從A搬到C 河內塔問題 - n個盤子處理 將1至n-1的盤子從A搬到B (借用C) 將編號n的盤子從A搬到C 把1至n-1的盤子從B搬到C 重點: 編號n的盤子是一定得在最底端,才不會佔住一個柱子 遞迴條件的停止? 河內塔問題 - n個盤子處理 河內塔問題-程式與時間複雜度 程式:p6-17 時間複雜度: 假設n個盤子搬移次數是h(n) n個盤子的搬移,等於兩次n-1盤子的搬移,加上一個單一盤子的移動 h(n) = 2 * h(n-1) + 1 用數學歸納法可證得,h(n) = 2n -1 最大公因數的計算 想一想,數學上最大公因數怎麼算? e.g. gcd(180, 75) = 15 非遞迴的做法: 找出二者共同的質數因數,予以相乘 最大公因數的計算 gcd問題包含 一個終止條件(m=n and n%m==0) 兩個遞迴條件 程式撰寫時,仍然是寫在一個函數內 其他常見的遞迴應用 Fibonacci費氏數列(費伯那西) * * //p6-4 //計算1+2+…+n int sum(int n) { int r; if (n==1) r = 1; else r = sum(n-1) + n; return (r); } sum(n) = [1 + 2 + 3 + … + (n-1)] + n = sum(n-1) + n 同樣的 sum(n-1) = sum(n-2) + n-1 … sum(n) = sum(n-1) + n = sum(n-2) + (n-1) + n = sum(n-3) + (n-2) + (n-1) + n = … stop condition : sum(1) = 1 //p6-7 void rec_prn(int n) { if (n0) { rec_prn(n-1); printf(%d , n); rec_prn(n-1); } } 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 呼叫: rec_prn(4); if n1 if n=1 遞迴條件:p6-32 a * b = a * (b-1) + a = [a * (b-2) + a] + a = ... 結束條件: a * 1 = a if n1 if n=1 程式可以執行,所以包含主程式 遞迴是自己呼叫自己,所以只需要一個函數 遞迴函數中,用if區分終止條件與遞迴條件 A B C A B C A B C n 1 n-1
您可能关注的文档
- 进口奶粉最新排行榜公布_图文.doc
- 进口报关单证审核.pptx
- 这饼要经常做给家人吃,增强抵抗力还预防感冒,关键是易做还好吃 - 图文-.doc
- 进水闸海曼段建模.pptx
- 进取系列宽带网关ReOS+SE高级配置手册.doc
- 进水闸闸室段建模.pptx
- 远洋地产(中山)创意剽窃案之法院受理书.ppt
- 远离不良行为 加强自我防范做遵纪守法好公民.ppt
- 远程电梯监控.doc
- 远程教育资源在局域网内发布的设置方法.doc
- 上海市宝山区2025-2026学年第一学期期末考试高三英语试卷(含答案).pdf
- 云南省普洱市镇沅县第一中学2025-2026学年高二上学期期中考试语文试题(含答案).pdf
- 天津市扶轮中学2025-2026学年高一上学期第一次月考英语试题(含答案).pdf
- 上海市杨浦区2026届高三一模英语试题(含答案).pdf
- 湖北省八校联考2025-2026学年高二上学期月考语文试题(含答案).pdf
- 山西省介休市第一中学校2025-2026学年高二上学期期中考试英语试卷(含答案,无听力原文及音频).pdf
- 江苏省无锡市梅村高级中学2025-2026学年高二上学期期中英语试题(含答案).pdf
- 山东省临沂市临沭县2025-2026学年九年级(上)期中化学试卷(含答案).pdf
- 山东省菏泽市2025-2026学年高二上学期期中考试英语(B)试卷(含答案,无听力原文及音频).pdf
- IPO审核耗时与首发股票市场表现.pdf
最近下载
- 第2章化学药物工艺路线的设计和选择研究报告.ppt
- 610821017856A03BG100河西联办煤矿隐蔽致灾因素普查报告修编7.19 (2)(1).docx VIP
- InSAR滑坡识别与监测.pptx VIP
- 政治经济学课件-社会主义市场经济体制.ppt VIP
- Unit 6 Useful numbers Part A(课件)人教PEP版(2024)英语三年级上册.pptx VIP
- 美卡素治疗高血压.ppt VIP
- 医院数据沙箱管理控制 .ppt VIP
- 青岛版科学六年级上册期末综合测试卷(含答案).pdf VIP
- 12YD18 太阳能光伏发电系统设计与安装.docx VIP
- 三维细胞培养技术的发展及其在干细胞和肿瘤细胞.PDF VIP
原创力文档


文档评论(0)