0
点赞
收藏
分享

微信扫一扫

递归版菲薄那切的时间复杂度(非记忆化)


看一下菲薄那切递归版函数

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;
}

结论:非递归版本的菲薄那切时间复杂度为


举报

相关推荐

0 条评论