5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴?

Slides:



Advertisements
Similar presentations
工職數學 第四冊 第一章 導 數 1 - 1 函數的極限與連續 1 - 2 導數及其基本性質 1 - 3 微分公式 1 - 4 高階導函數.
Advertisements

第一單元 建立java 程式.
101北一女中 資訊選手培訓營 遞迴、河內塔與merge sort Nan.
Introduction to C Programming
3-2 條件不等式 解一元 n 次不等式 二元一次不等式的圖解法 函數的極植.
黄金分割理论在股市中的应用 包头营业部.
请说出牛顿第一定律的内容。.
《7.1 力》说课稿 丰城中学 杨青青.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
二元一次不等式 課堂練習一:圖解 x
5.1 自然對數函數:微分 5.2 自然對數函數:積分 5.3 反函數 5.4 指數函數:微分與積分 5.5 一般底數的指數函數和應用 5.6 反三角函數:微分 5.7 反三角函數:積分 5.8 雙曲函數.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
基本程式範例.
Supplement Data Mining 工具介紹 楊立偉教授 台灣大學工管系 2014 Fall 1.
遞迴演算法.
在NS-2上模擬多個FTP連線,觀察頻寬的變化
SQL Stored Procedure SQL 預存程序.
5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴?
(Circular Linked Lists)
Quiz6 繳交期限: 12/14(四) 23:59前.
The Divide-and-Conquer Strategy
檔案與磁碟的基本介紹.
資料結構 第1章 導論.
Java 程式設計 講師:FrankLin.
Chap3 Linked List 鏈結串列.
第一章 直角坐標系 1-1 數系的發展.
虎克定律與簡諧運動 教師:鄒春旺 日期:2007/10/8
新訂賴氏人格測驗 計分說明 文輔室.
第一單元 建立java 程式.
遞迴 Recursive 授課老師:蕭志明.
Ch2多項式函數 2-2 多項式的運算與應用 影音錄製:陳清海老師 資料提供:龍騰文化事業股份有限公司.
Definition of Trace Function
新訂賴氏人格測驗 計分說明 文輔室.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
數字定位棋 1-7
CH05. 選擇敘述.
河內之塔(Towers of Hanoi)問題
算獨教學 范國祥製作 於新湖國小 算獨資料來源
Quiz7 繳交期限: 12/14 23:59.
第 5 章 遞迴.
第 二 章 遞迴(Recursion) 課程名稱:資料結構 授課老師:________ 2019/5/5.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
Chapter 1 演算法分析 1.1 演算法 1.2 Big-O.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
Commando War ★★☆☆☆ 題組:Problem Set Archive with Online Judge
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
資料表示方法 資料儲存單位.
Chapter 6 遞迴.
期末報告第一題 通訊四甲 B 湯智瑋.
4-1 變數與函數 第4章 一次函數及其圖形.
2.1 一元一次不等式 定 義 設a、b為兩個實數。.
程式設計實習第十二次上課 傅榮勝.
在直角坐標平面上兩點之間 的距離及平面圖形的面積
All Sources Shortest Path The Floyd-Warshall Algorithm
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
7. 三角學的應用 正弦公式 餘弦公式 a2 = b2 + c2 - 2bc cos A b2 = a2 + c2 - 2ac cos B
快取映射 之直接對映 計算整理.
遞迴
第三章 比與比例式 3-1 比例式 3-2 連比例 3-3 正比與反比.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴? Chapter 5 遞迴 5.1 一些一些遞迴的基本範例 5.2 一個典型的遞迴範例:河內塔 5.3 另一個範例:八個皇后 5-4 何時不要使用遞迴?

遞迴 在程式設計中,我們有時會利用遞迴以解決某些問題,既經濟又方便。 遞迴是一項比較抽象的課題,因此它隱含地利用了堆疊做為其存放暫時資料的場所,使得它給人有一種神祕的感覺。

5.1 一些遞迴的基本範例 一個呼叫它本身的函數稱為遞迴(Recursive)。在撰寫程式中,也常常會應用遞迴來處理某些問題,而這些問題通常有相同規則的性質,如求n!

5.1 一些遞迴的基本範例 從上述得知其相同的規則為某一數A的階層為本身A乘以(A減1)階層,依循此規則即可求出。

5.1 一些遞迴的基本範例 在撰寫遞迴時,千萬要記住必須有一結束點,使得函數得以往上追溯回去。如上例中,當n=1時,1!=1即為其結束點。 5.1 一些遞迴的基本範例 在撰寫遞迴時,千萬要記住必須有一結束點,使得函數得以往上追溯回去。如上例中,當n=1時,1!=1即為其結束點。 若以圖形表示n!階層的做法;假設n=4,其步驟如下(注意箭頭所指的方向):

5.1 一些遞迴的基本範例

5.1 一些遞迴的基本範例 其實編譯程式在處理遞迴時,會藉助堆疊將呼叫本身函數的下一個敘述位址儲存起來,待執行完結束點後,再將堆疊的資料一一的彈出來處理。

5.2 一個典型的遞迴範例:河內塔 十九世紀在歐洲有一遊戲稱為河內塔(Towers of Hanoi),有64個大小不同的金盤子,三個鑲鑽石的柱子分別為A、B、C,今想把64個金盤子從A柱子移至C柱子,但可以借助B柱子,遊戲規則為: 每次只能搬一個盤子; 盤子有大小之分,而且大盤子在下,小盤子在上。

5.2 一個典型的遞迴範例:河內塔 假設有n個金盤子(1, 2, 3, ..., n),數字愈大表示重量愈重,其搬移的演算法如下: 否則 5.2 一個典型的遞迴範例:河內塔 假設有n個金盤子(1, 2, 3, ..., n),數字愈大表示重量愈重,其搬移的演算法如下: 假使n=1則 搬移第1個盤子從A至C 否則 搬移n-1個盤子從A至B 搬移第n個盤子從A至C 搬移n-1個盤子從B至C

5.2 一個典型的遞迴範例:河內塔 假設以3個金盤子為例:從A柱子搬到C柱子,而B為輔助的柱子。

5.2 一個典型的遞迴範例:河內塔 〔說明〕 將1號金盤子從A搬到C 將2號金盤子從A搬到B,結果如下圖:

5.2 一個典型的遞迴範例:河內塔 〔說明〕 將1號金盤子由C搬到B 將2號金盤子由A搬到C,結果如下圖:

5.2 一個典型的遞迴範例:河內塔 〔說明〕 將1號金盤子由B搬到A 將2號金盤子由B搬到C,結果如下圖:

5.2 一個典型的遞迴範例:河內塔 〔說明〕 將1號金盤子由A搬到C,結果如下圖: 完成了!

5.2 一個典型的遞迴範例:河內塔 程式的追蹤如右:

5.3 另一個範例:八個皇后 這個遊戲的規則是,皇后之間不可在同一列(row)、同一行(column),也不可以在同一個對角線(diagonal)上,在這前提下,您是否可以為這些皇后們分派適當的位置,讓他們能和平相處。

5.3 另一個範例:八個皇后 八個皇后(eight queens)的問題,除了牽涉到遞迴,還包含了往回追蹤(Backtracking)的問題,何謂往回追蹤?其意義乃是當某一皇后無適當位置可放時,此時必須往回調整前一皇后的位置,以此類推,我們以四個皇后為例,如下情形:

5.3 另一個範例:八個皇后 此時第三個皇后沒有適當位置可放,因此必須移動第二個皇后,讓她在後一個位置,如

5.3 另一個範例:八個皇后 此時第三個皇后便可放在第三列的第二行。如

5.3 另一個範例:八個皇后

5.3 另一個範例:八個皇后 四個皇后最後的圖形如下: 上面的樹狀圖解釋如下:

5.3 另一個範例:八個皇后

5-4 何時不要使用遞迴? 遞迴雖然可以使用少數幾行的敘述就可解決一複雜的問題,但有些問題會導致花更多的時間。 5-4 何時不要使用遞迴? 遞迴雖然可以使用少數幾行的敘述就可解決一複雜的問題,但有些問題會導致花更多的時間。 費氏數列(Fibonacci number)的計算方式,某一數乃是前二位數的和,如 F0=1, F1=1, F2=F1+F0=2

5-4 何時不要使用遞迴? 餘此類推 Fn=Fn-1+Fn-2對n≧2而言 以遞迴處理時,其遞迴樹(recursive tree)如下

5-4 何時不要使用遞迴?

5-4 何時不要使用遞迴? 從上圖得知,F4、F3、F2、F1重覆執行多次,像這種遞迴樹重覆的動作太多,在此情況下,不適合用遞迴的。 5-4 何時不要使用遞迴? 從上圖得知,F4、F3、F2、F1重覆執行多次,像這種遞迴樹重覆的動作太多,在此情況下,不適合用遞迴的。 此處可證明Fn其時間的複雜度是2n/2指數型態(exponential)。

5-4 何時不要使用遞迴? 若以非遞迴,即以反覆式(iterative)程式執行,其程式請參閱5-1節中利用迴圈法(也可以說反覆式方法)計算費氏數列的Fibonacci函數。 從此片段程式中可以容易地看出其Big-O為O(n) 。

5-4 何時不要使用遞迴?

5-4 何時不要使用遞迴? 從右邊往下做,直到1之後,再往上面做上去,這種遞迴樹不像一棵灌木(長得很強壯,不是瘦高型),而是一種簡單的鏈型(chain)型式。

5-4 何時不要使用遞迴? 這種情形也不太適合用遞迴,而以非遞迴的方式處理較合適,分析如下:

5-4 何時不要使用遞迴? 由於非遞迴使用了較多的區域變數(local variable),所以直覺上以為遞迴會較好,其實不然,因為遞迴使用了更多的時間存放暫時的結果,所以實際上遞迴花了更多的時間,因此,類似此種遞迴樹相當簡單,有如一條通道的,建議您還是使用非遞迴較佳。