Chapter 6 遞迴.

Slides:



Advertisements
Similar presentations
做中国梦 走特色路 —— 宁波电大业余党校时政课 林志标 四川雅安地震 2013 年 4 月 20 日 8 时 02 分四川省雅安市芦山县(北纬 30.3, 东 经 )发生 7.0 级地震。震源深度 13 公里。震中距成都约 100 公里。成都、重庆及陕西的宝鸡、汉中、安康等地均有较.
Advertisements

海南省疾病预防控制中心. (一)基本情况  工作用房面积: ㎡,其中实验室使用面积为 6500 ㎡  中心定编 213 人,其中全额预算编制 193 人,自筹编制 20 人  现有在职职工 320 名,其中专业技术人员占 84.3% 。 人性化的办公场所实验室区域 一、海南省疾病预防控制中心概况.
102學年度第二學期 家長日親師座談會 歡迎蒞臨 丹鳳高中. 高中成績規則介紹 註冊組 段考成績計算方式 學科加權後計算 國文*4+英文*4+數學*4+… 班級名次 類組共同學科加權計算 國文*4+英文*4+數學*4+…(社會組自然組) 類組名次 年級共同學科加權計算 國文*4+英文*4+數學*4(考試題目相同)
H7N9 禽流感. H7N9 流感确诊病例主要表现 1 、起病急; 2 、病程早期均有高热 (38 ℃以上 ) ,伴咳嗽等呼 吸道感染症状,起病 5-7 天出现呼吸困难; 3 、典 型的病毒性肺炎,重症肺炎并进行性加重,部分 病例可迅速发展为急性呼吸窘迫综合症并死亡。
第一單元 建立java 程式.
牛熊證簡介.
人感染H7N9禽流感医院感染 预防与控制技术指南
传染病预检分诊工作要求 发热门诊管理要求.
101北一女中 資訊選手培訓營 遞迴、河內塔與merge sort Nan.
密云季庄小 学心理讲座 合理情绪 幸福生活 武金红 密云教研中心.
Introduction to C Programming
做好学校甲型H1N1流感防控工作 确保师生身体健康
H7N9禽流感相关知识
前进中的山东省昌乐二中.
甘肃4班面试专项练习4 应急应变 主讲: 凌宇 时间:6月3日.
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
只要大家共同努力,禽流感是可以預防的疾病。
菏泽市初中历史水平考试备考研讨与交流 菏泽市教研室 张红霞.
企劃撰寫.
5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴?
合 同 法 主讲人: 教材:《合同法学》(崔建远) 2017/3/10.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
歡迎蒞臨 三年八班大家族 導師:陳冠諠老師 16個帥氣寶貝 16個漂亮寶貝.
中考阅读 复习备考交流 西安铁一中分校 向连吾.
人力資源管理委員會 主席:魏麗香部長 執秘:董家檥督導 委員:林姿伶HN、黃士豪HN、潘秋華HN 林素琴專師組長、卓惠瑄、張維恩、王孟萱、
第五組 幼兒安全與衛生教育 組員: 譚郁馨 張喻晴 沈恩華
忠孝國小自立午餐老師的叮嚀 教師指導手冊.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
10.2 分子动理论的初步知识 蒙城县乐土中学 袁亮.
《中华人民共和国传染病防治法》部分知识 河西区卫生局.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
中考语文积累 永宁县教研室 步正军 2015.9.
小学数学知识讲座 应用题.
甲型H1N1流感预防常识 北仑区疾病预防控制中心.
倒装句之其他句式.
Chapter 5 遞迴 資料結構導論 - C語言實作.
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
遞迴演算法.
物件導向程式設計 (Object-Oriented rogramming)
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
C語言簡介 日期 : 2018/12/2.
5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴?
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
1.3 在整除性問題之應用 附加例題 3 © 文達出版 (香港 )有限公司.
第一單元 建立java 程式.
遞迴 Recursive 授課老師:蕭志明.
數學遊戲一 河內塔 (Tower of Hanoi)
Chapter 2 遞迴 (Recursion).
小學四年級數學科 8.最大公因數.
河內之塔(Towers of Hanoi)問題
第 5 章 遞迴.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
第 二 章 遞迴(Recursion) 課程名稱:資料結構 授課老師:________ 2019/5/5.
函數應用(二)與自定函數.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
第八节 算术运算符和算术表达式.
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
※歡迎挑戰,兩人(隊)中先完成連線即算過關!
if (j…) printf ("… prime\n"); else printf ("… not prime\n");
遞迴 Recursion.
10328: Coin Toss ★★★☆☆ 題組:Problem Set Archive with Online Judge
認識H1N1 盧亞人醫院 感控護士 劉秀屏.
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
認識﹋禽流感*.
遞迴
Chapter 16 動態規劃.
方法(Method) 函數.
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

Chapter 6 遞迴

遞迴的基本觀念 遞迴:recursion,程式撰寫的重要技巧 特色: 函數以遞迴條件呼叫自己本身 必須加入終止條件,以免無窮的呼叫自己 增加可讀性,但是執行效率一般會比較差 某些程式語言沒有支援遞迴的程式撰寫

簡單的遞迴範例 sum(n) = [1 + 2 + 3 + … + (n-1)] + n //p6-4 = sum(n-1) + 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

遞迴設計 由上而下 top-down Divide And Conquer 原始問題可以切割成若干小問題 小問題與原始問題的“外觀”相同 小問題的資料量比原始問題縮小 Divide And Conquer 切割 分別處理 合併

遞迴呼叫的範例 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 //p6-7 void rec_prn(int n) { if (n>0) { rec_prn(n-1); printf("%d ", n); } 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 呼叫: rec_prn(4);

間接遞迴 函數呼叫自己本身,稱為直接遞迴 兩個以上函數互相呼叫,形成一迴路,稱為間接遞迴 例如: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 (這個理所當然的條件有什麼用?) 正式的條件 if n>1 if n=1

乘法的計算 a*b a * b 如何用加法的遞迴方式表示? 遞迴條件:p6-32 a * b = a * (b-1) + a = [a * (b-2) + a] + a = ... 結束條件: a * 1 = a

練習 寫出n!的遞迴計算程式 程式可以執行,所以包含主程式 遞迴是自己呼叫自己,所以只需要一個函數 遞迴函數中,用if區分終止條件與遞迴條件 if n>1 if n=1 程式可以執行,所以包含主程式 遞迴是自己呼叫自己,所以只需要一個函數 遞迴函數中,用if區分終止條件與遞迴條件

河內塔問題(Tower of Hanoi) 問題:p6-12 搬移限制: 有三根柱子A、B、C 在A上面有n個盤子,由上而下編號1到n。考慮最簡單的情形 n=3 目標:將n個盤子搬到C 搬移限制: 每次只能搬移柱子最上面的一個盤子 在整個過程中,編號大的盤子不可以放在編號小的盤子上面

河內塔問題(Tower of Hanoi) A B C A B C

河內塔問題 - 3個盤子處理 將1號盤子從A搬到C 2號盤子從A搬到B 1號盤子自C搬到B 3號盤子搬到C 1號盤子從B搬到A

河內塔問題 - n個盤子處理 將1至n-1的盤子從A搬到B (借用C) 將編號n的盤子從A搬到C 把1至n-1的盤子從B搬到C 重點: 遞迴條件的停止?

河內塔問題 - n個盤子處理 A B C n 1 n-1 A B C n 1 n-1 A B C n 1 n-1 A B C n 1 n-1

河內塔問題-程式與時間複雜度 程式: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) 兩個遞迴條件 程式撰寫時,仍然是寫在一個函數內 if m<=n and n%m==0 if n<m otherwise gcd問題包含 一個終止條件(m<=n and n%m==0) 兩個遞迴條件 程式撰寫時,仍然是寫在一個函數內

其他常見的遞迴應用 Fibonacci費氏數列(費伯那西) if n = 1, 2 if n > 2 課本 p6-24