8. 函式與遞迴

I. 函式

A. 何謂函式?

想必大家應該不陌生,在數學科目中應該多少有接觸到吧!!

B. 為何需要函式?

最主要其實是要將某個流程封裝、模組化,未來若需要進行同樣流程時,我們只需要呼叫這模組即可,程式碼能夠精簡化,也比較美觀

人偶爾會幻想如果有個僕人能幫我做牛做馬的那該有多好啊!!其實函式就像是個專業的僕人,你可以請他幫你完成一些事,不過要記住,他是個專業的僕人,不是萬能的僕人,專業的僕人只會做專業的幾件事喔!

C. 函式的基本結構

1. 無回傳值、無參數輸入型

2. 無回傳值、有參數輸入型

3. 有回傳值、無參數輸入型

4. 有回傳值、有參數輸入型

D. 函式呼叫

1. 既然函式可以視作僕人,呼叫函式的就是主人囉!

2. 在主人還沒呼叫函式前函式是不會有動作的

3. 函式必須在呼叫前先定義完成

4. 參數可以有多個,且型態不拘

1. 無參數的函式

2. 單個參數的函式

3. 多個參數的函式

主人用x與y參數傳給僕人,僕人方相對應的參數視為為a與b

4. 未知個參數的函式

函式中參數前面加上*號,表示可輸入未知筆資料,所輸入的資料將存在陣列(tuple)中

5. 有預設值的參數

6. 函式的相互呼叫

7. 【補充】閉包(closure)函式

原先沒有closure,我們需要傳遞a, b, x參數,closure可以讓程式設計更有效率,同時未來擴充時,程式碼可以更容易移植

II. 遞迴

其實就是自己呼叫自己的函式

Recursion(遞迴)

A. 遞迴的必要條件

  1. 遞迴關係式(需有回傳 : 記憶)

  2. 有個最終停止的點(驚醒)

B. 範例

【範例一】請用遞迴方式計算n層香檳塔共有幾個杯子

觀察

1層香檳塔 → 1個杯子

2層香檳塔 → 5個杯子

......

n層香檳塔 → ?

歸納

是否存在遞迴關係式?A:Sn=Sn1+n×nS_n = S_{n-1} + n × n

是否有最終停止的點?A:S1=1S_1 = 1

程式碼

遞迴並不是在任何情況下都比迴圈來的好用

遞迴就只是自己呼叫自己的函式

【範例二】請用遞迴方式計算出n階乘的值

觀察

0! → 1

1! → 1

2! → 2

.....

n! → ?

歸納

是否存在遞迴關係式?A:Fn=Fn1×nF_{n} = F_{n-1} × n

是否有最終停止的點?A:F0=1F_{0} = 1

程式碼

Last updated

Was this helpful?