看一下菲薄那切递归版函数
int f(int n) {
ans++;
if (n == 0 || n == 1)
return 1;
return f(n - 1) + f(n - 2);
}
测试代码:
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int ans = 0;
/*时间复杂度O((1-2)^n)*/
int f(int n) {
ans++;
if (n == 0 || n == 1)
return 1;
return f(n - 1) + f(n - 2);
}
int fs(double x, int n) {
double ans = 1.0;
while (n--)
ans *= x;
return ans;
}
int main() {
int n = 25;
cout << f(n) << endl;
double k = 0.0;
double l = 1, r = 2;
while (r - l >= 0.0000000001) {
double mid = (l + r) * 0.5;
if (fs(mid, n) > ans) {
r = mid - 0.0000000001;
} else {
l = mid + 0.0000000001;
k = mid;
}
}
cout << k << ' ' << ans << ' ' << fs(k, n) << endl;
return 0;
}
结论:非递归版本的菲薄那切时间复杂度为。