面试题 9,斐波那契数列

最简单的递归自然不会成为答案的采纳对象。

我的第一思路是使用数组记录递归,这也是当递归出现重复计算的时候的一般思路。完整代码如下,已调试。

#include <stdlib.h>
#include <stdio.h>
using namespace std;

int calculate(int n, int *list){
    if(list[n] > 0 || n == 0)
        return list[n];
    else{
        list[n] = calculate(n-1, list) + calculate(n-2, list);
        return list[n];
    }
}

int FebonacciResult(const int size){
    int *rec = new int[size];
    for(int i = 0;i < size;i++)
        rec[i] = 0;
    rec[0] = 0;
    rec[1] = 1;
    return calculate(size-1, rec);
}

int main(){
    int size = 0;
    scanf("%d", &size);
    int result = FebonacciResult(size);
    printf("%d\n", result); 
    
    return 0;
}

答案中的代码更加简洁也没有使用额外的空间,直接使用for循环来实现。

这两种的解法的时间复杂度均为O(N)

还有时间复杂度为O(logN)的方法,需要用到的公式和解释如下:

 

posted on 2013-11-28 20:24  Felix Fang  阅读(133)  评论(0)    收藏  举报

导航