Fibonacci

Find the Nth number in Fibonacci sequence.

Discussion

根据公式递归非常简单,唯一需要注意的是f(1)=0,而不是f(0)=0,因为没有第0个。。。

Solution - Recersion

int fibonacci(int n) {
        if(n<=2) return n-1;
        return fibonacci(n-1) + fibonacci(n-2);
    }

Follow up

画递归调用树,可以看出有大量重复的计算,时间复杂度是O(2^N),显然效率太低了。而我们知道动归是可以减少这种重复计算的。下面给出算法。

Solution - DP

//O(n) rum time
//O(n) space
int fibonacci(int n) {
        if(n<=2) return n-1;
        vector<int> f(n+1, 0);
        f[1] = 0;
        f[2] = 1;
        for(int i=3; i<=n; i++) {
            f[i] = f[i-2] + f[i-1];
        }
        return f[n];
}

普通动归总是可以改进space的,这个也不例外。

//O(n) rum time
//O(1) space
    int fibonacci(int n) {
        if(n<=2) return n-1;
        int a = 0;
        int b = 1;
        int result = 0;
        for(int i=3; i<=n; i++) {
            result = a + b;
            a = b;
            b = result;
        }
        return result;
    }

results matching ""

    No results matching ""