111年檢察事務官三等程式語言

三、若有一個遞迴函數如下:

    Procedure FIB(n)

        if n = 0, FIB = 0;

        if n = 1, FIB = 1;

        else FIB(n-1)+FIB(n-2)

        end if

    end

    試問 FIB(4) 之值為多少?在計算 FIB(4) 值時,需要呼叫此 FIB(n) 函數多少次。(25分)

答:

pic01.png

#include <iostream>

using namespace std;

int cnt = 0; // 呼叫次數

int FIB(int n) {

    cnt++;

    if (n == 0) {

        return 0;

    }

    if (n == 1) {

        return 1;

    }

    else {

        return FIB(n - 1) + FIB(n - 2);

    }

}

int main(void) {

    cout << "FIB(4) = " << FIB(4) << endl;

    cout << "呼叫次數 = " << cnt << endl;

    return 0;

}

執行結果:

FIB(4) = 3

呼叫次數 = 9

()FIB(4)的值

FIB(4) = FIB(4-1)+FIB(4-2) = FIB(3)+FIB(2)

FIB(3) = FIB(3-1)+FIB(3-2) = FIB(2)+FIB(1)

FIB(2) = FIB(2-1)+FIB(2-2) = FIB(1)+FIB(0) = 1+0 = 1

FIB(3) = FIB(2)+FIB(1) = 1+1 = 2

FIB(4) = FIB(3)+FIB(2)= 2+1 = 3

由以上得知 FIB(4) 的值為3

()呼叫FIB(n)函數多少次

由上圖可知呼叫9次節點,所以是9次。

arrow
arrow
    文章標籤
    程式語言
    全站熱搜

    jacksaleok 發表在 痞客邦 留言(0) 人氣()