在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)來避免遞歸版本的重複計算,這樣既能保持遞歸的簡潔性,又能提高效率。