Skip to content

[C++] 基本教學 07: 函式(function)

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開始,之後的斐波那契系數就是由之前的兩數相加而得出。首幾個斐波那契系數是:

01123581321345589144233……(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


Read More

Tags:

Leave a Reply