將遞迴方法改寫為迴圈疊代的方式計算費波那契數列,可以提高效率,特別是對於大數值的計算。以下是使用迴圈疊代方式實現費波那契數列的C++程式碼,它避免了遞迴的重複計算問題:
#include <iostream>
using namespace std;
int fib(int num) {
if (num == 0) return 0;
if (num == 1) return 1;
int prevPrev = 0; // 前前一個數
int prev = 1; // 前一個數
int current = 0; // 目前的數
for (int i = 2; i <= num; i++) {
current = prevPrev + prev;
prevPrev = prev;
prev = current;
}
return current;
}
int main() {
int num = 100;
cout << "Fib(" << num << ") = " << fib(num);
return 0;
}
在這個迴圈版本中,我們初始化了兩個變數prevPrev和prev來分別存儲計算過程中的Fib(n-2)和Fib(n-1)的值。然後,我們從i=2開始迴圈,直到達到目標數num。在每次迴圈的過程中,我們計算當前費波那契數current為prevPrev + prev,然後更新prevPrev和prev的值以便於下一輪迴圈的計算。
這種方法只需要O(n)的時間複雜度,相比於遞迴方法的指數時間複雜度,這是一個顯著的改進。此外,它也避免了遞迴可能導致的堆棧溢出問題。