Presentation is loading. Please wait.

Presentation is loading. Please wait.

函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.

Similar presentations


Presentation on theme: "函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果."— Presentation transcript:

1 函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷

2 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果

3 範例:從 1 加到 N 之級數求和

4 習題:階乘 請寫作一程式,利用函式的遞迴呼叫,輸 入整數 N 後,可以求其階乘值 N! 試問:在 N 大於多少時,會發生整數溢位( overflow ) 的現象?

5 Call by Value; Call by Address 一般 C 的函式呼叫,傳送引數是採取 call by value 的方式,也就是把引數的「值」 拷貝到函式中,函式裡面對這個變數的任 何修改,並不會改變主函式(呼叫者)內 該變數的值 若要透過被呼叫的函式修改這個變數在主 函式中的值,必須採取 call by address 的 方式

6 範例: Fibonacci 數列 此數列是在中世紀時期由義大利有名的數 學家 Fibonacci 所發表。他在 1202 年出版 的『算盤書』中, 有一題『兔子問題』, 題 目是這樣的:

7 Fibonacci 數列 根據題意我們可以假設月份為 Fn, 其值為 兔子的總對數。由此推出一個數列: 此數列就是 Fibonacci 數列, 其特性就是當 n>2 時, 第 n 項的值就是前 2 項的和 ( 第 n- 2 項加第 n-1 項 ) 。

8 Call by Value 之例 : Fibonacci 數列

9 Call by Address 之例 : Fibonacci 數列

10 兩種呼叫方式之比較

11 何謂 Call by Address? 在第二個例子中,函數的引數是「位址」 而不是「數值」: c=fibo(&a,&b); 在變數 a 的前面加一個 & 符號:「 &a 」,這 代表 a 這個變數在記憶體上的位置(位址) 而在函數的定義中: int fibo(int *a, int *b) 表 示, a 與 b 是兩個記憶體的位址,在這個位 址上儲存的變數是整數 在位址前面加一個星號「 *a 」表示該位址所 儲存的變數的數值

12 以遞迴呼叫函數方式求 Fibonacci 數列某 項的值

13 求出 Fibonacci 數列某項的值

14 執行結果

15 作業:數值微分 作業:寫作一程式計算數值微分,利用一 函數求 f(x)=3x 2 +exp(x 2 +2x) 之數值微分 [f(x+h)-f(x)]/h 。另一函數求此函數微分之精 確值 df(x)/dx = 6x+exp(x 2 +2x) ‧ (2x+2) 。給 定 x=1, h = 0.01, 0.0001, 0.000001, 0.00000001 時,數值微分所求出的值與精 確微分值相差多少?


Download ppt "函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果."

Similar presentations


Ads by Google