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. 遞迴
其實就是自己呼叫自己的函式




A. 遞迴的必要條件
遞迴關係式(需有回傳 : 記憶)
有個最終停止的點(驚醒)
B. 範例
【範例一】請用遞迴方式計算n層香檳塔共有幾個杯子
觀察:
1層香檳塔 → 1個杯子
2層香檳塔 → 5個杯子
......
n層香檳塔 → ?
歸納:
是否存在遞迴關係式?A:
是否有最終停止的點?A:
程式碼:
遞迴並不是在任何情況下都比迴圈來的好用
遞迴就只是自己呼叫自己的函式
【範例二】請用遞迴方式計算出n階乘的值
觀察:
0! → 1
1! → 1
2! → 2
.....
n! → ?
歸納:
是否存在遞迴關係式?A:
是否有最終停止的點?A:
程式碼:
Last updated
Was this helpful?