【刷算法】斐波那契數列

問題

如今請求輸入一個整數n,請你輸出斐波那契數列的第n項。

遞歸操縱O(2^n)

function fibonacci(n) {
    if(n < 1)
        return 0;
    if(n === 1 || n === 2)
        return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

時候複雜度O(2^n)太高,而且用遞歸會發生許多反覆的操縱。

非遞歸操縱O(n)

function Fibonacci(n)
{
    if(n < 1)
        return 0;
    if(n === 1 || n === 2)
        return 1;
    var s1 = 1;
    var s2 = 1;
    var res = 0;
    for(var  i = 3;i <= n;i++) {
        res =  s1 + s2;
        s1 = s2;
        s2 = res;
    }
    
    return res;
}

這類要領就是一次遍歷過去就行,盤算第n個數時,使用了s1、s2兩個變量存儲第n-1和第n-2個數,使時候複雜度降低到O(n)

    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015326332
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞