我有一個任務是對遞歸斐波那契算法進行分析。該算法具有O(2^n)複雜度。我已經讀過n是深度,在另一篇文章中,n是2^n中的輸入大小。那麼真相是什麼?然後如何統計步數(也許我們也可以稱之爲遞歸調用)來獲得一個斐波那契數。我有這樣的代碼:遞歸斐波那契算法的複雜性和步數
#include <bits/stdc++.h>
using namespace std;
long fibonacci(long);
long jl=0;
double rt;
int main(){
long result, number;
scanf("%ld", &number);
clock_t mulai = clock();
result = fibonacci(number);
rt = ((double) (clock() - mulai))/CLOCKS_PER_SEC;
printf("Fibonacci (%ld) = %ld\n", number, result);
printf("Jumlah langkah = %ld\n", jl);
printf("Running Time = %.10f\n", rt);
return 0;
}
long fibonacci(long n){
jl++;
if(n==0 || n==1)
return n;
else
return fibonacci(n-1) + fibonacci(n-2);
}
jl在此代碼中的步數(遞歸調用)。這是我的計算示例:
F(1),JL = 1
F(2),JL = 3
F(3),JL = 5
F(5) ,jl = 15
那麼,這是真的還是假的?如果錯誤什麼是正確的代碼?謝謝。
你的問題確實不清楚。你想知道'n'是什麼嗎?分析代碼的複雜性時你有問題嗎?你是否試圖計算代碼運行的次數?考慮修改問題更清楚。 – nitzanms
我想了解n是什麼,以及如何計算步數/遞歸調用 – RiefSapthana
在複雜性分析中,'n'總是輸入的大小。遞歸深度是你從'n'計算來確定複雜度的東西。 – Barmar