Last Updated on 2021-05-03 by Clay
函式(function)是能夠將程式中不同功能的程式碼切分得更精細的模組,並在需要時透過呼叫函式來反覆利用已經寫好的程式碼。
不過要記得,main() 是程式的進入點,所有函式必須在 main() 之前宣告完成(當然,你可以先宣告該函式,然後在下方才補完函式的功能)。
另外,函式同樣需要遵守宣告的資料型態,例如你無法使用 char
宣告函式,然後回傳一個數值變數(你看到會看不見自己回傳的東西)。
以下就簡單介紹該如何撰寫函式吧!
我們可以將想要做的功能寫成函式
比如說,我們想要一個相加兩個陣列的函式,我們可以這麼寫:
#include <iostream> using namespace std; void sum(int a[], int b[]) { for (int i=0; i<5; i++) { a[i] += b[i]; } } int main() { int a[5] = {1, 2, 3, 4, 5}; int b[5] = {6, 7, 8, 9, 10}; // Sum sum(a, b); // Print for (int i=0; i<5; i++) { cout << a[i] << endl; } return 0; }
Output:
7
9
11
13
15
可以看到,我們確實將 a 陣列透過 sum()
加上 b 陣列的值了。
使用函式計算 Fibonacci 的值(遞迴)
說到函式,就不得不提到函式的常用功能之一 —— 遞迴式的建構。透過函式自己呼叫自己,可以逐步將複雜的問題一層層地簡化,直到完成。
在這裡,我簡單介紹何謂費氏數列(Fibonacci numbers)。
斐波那契數列(義大利語:Successione di Fibonacci),又譯為菲波拿契數列、菲波那西數列、斐氏數列、黃金分割數列。
– F0=0
– F1=1
– Fn= Fn-1+Fn-2(n≧2)
用文字來說,就是費氏數列由0和1開始,之後的斐波那契系數就是由之前的兩數相加而得出。首幾個斐波那契系數是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的數列A000045)
—— From Wikipedia
以上就是簡單的費氏數列介紹,最重要的就是中間的三個數學式了。而這三個數學式,我們可以使用三個判斷式完成,並將其寫成函式,以此實現遞迴。
以下則是程式的實作:
#include <iostream> using namespace std; int fibo(int n) { if (n == 0) { return 0; } else if (n == 1) { return 1; } else { return fibo(n-1) + fibo(n-2); } } int main() { // Print cout << fibo(5) << endl; return 0; }
Output:
5
大家也可以試試看輸入不同的值,看看是否真的完成了費氏數列。
References
- https://www.tutorialspoint.com/cplusplus/cpp_functions.htm
- https://www.programiz.com/cpp-programming/function
- https://www.cplusplus.com/doc/tutorial/functions/
- https://www.w3schools.com/cpp/cpp_functions.asp