阿摩線上測驗 登入

申論題資訊

試卷:98年 - 098年高等三級暨普通普_資訊處理#32443
科目:程式設計
年份:98年
排序:0

申論題內容

四、用C語言撰寫反覆結構(for-loop)及遞迴函式(recursive)2 個版本的函式,能計算出 費式數列 (Fibonacci Sequence): int F(int n),其數學定義如下:
F0 = 0, F1 = 1, and Fn = Fn–1 + Fn–2 for n >1。(25 分) 例如:呼叫 F(6) 計算出 8 and F(7) 計算出 13

詳解 (共 1 筆)

詳解 提供者:hchungw

在C語言中,可以使用兩種方法來計算斐波那契數列:迭代(使用for迴圈)和遞歸。以下是兩種方法的實現。
迭代版本(使用for迴圈)
c
Copy code
#include <stdio.h>
int fibonacciIterative(int n) {
    int a = 0, b = 1, c, i;
    if(n == 0)
        return a;
    for(i = 2; i <= n; i++) {
       c = a + b;
       a = b;
       b = c;
    }
    return b;
}
int main() {
    int n = 6;
    printf("F(%d) = %d\n", n, fibonacciIterative(n));
    n = 7;
    printf("F(%d) = %d\n", n, fibonacciIterative(n));
    return 0;
}
遞歸版本
c
Copy code
#include <stdio.h>
int fibonacciRecursive(int n) {
    if(n <= 1)
        return n;
    return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
int main() {
    int n = 6;
    printf("F(%d) = %d\n", n, fibonacciRecursive(n));
    n = 7;
    printf("F(%d) = %d\n", n, fibonacciRecursive(n));
    return 0;
}
迭代版本更加高效,因為遞歸版本進行了很多重複的計算,並且遞歸深度大的時候可能會導致棧溢出。不過遞歸版本更直觀且易於理解,尤其是對於符合自然遞歸結構的問題。在實際應用中,可以使用額外的存儲(如動態規劃或memoization)來避免遞歸版本的重複計算,這樣既能保持遞歸的簡潔性,又能提高效率。