对于斐波拉且数列是个很经典的编程题目,问题描述为:
也是动态规划里面一个,常常用来解决问题的方法。一般c/c++书籍都会介绍,作为递归来引入。下面介绍几种不同的解决思路,主要是对 time-ram 做比对。
- 递归
一般空间复杂度会很大,不予考虑做编程测试。
int F(int n)
{
if(n<=0) return 0;
if(n==1) return 1;
return F(n-1)+F(n-2);
}
int Fibonacci(int n) {
if(n>39||n<=0) return 0;
return F(n);
}
3. 循环——非数组(time = O(n))
int Fibonacci(int n) {
if(n>39||n<=0) return 0;
if(n==1) return 1;
int fl = 0;
int fh = 1;
int f = 0;
for(int i=2;i<=n;++i)
{
f = fl+fh;
fl = fh;
fh = f;
}
return f;
}
3. 循环——数组
int Fibonacci(int n) {
if(n>39||n<=0) return 0;
int *a = new int[n+1];
a[0] =0;
a[1] =1;
if(n<2) return a[n];
for(int i=2;i<=n;++i)
{
a[i] = a[i-1]+a[i-2];
}
return a[n];
}