學(xué)習(xí)斐波那契數(shù)列的方法

今天記錄一波面試。雖然被虐但是很爽。why? because I will get knowledge~(還是太菜)
什么是斐波那契數(shù)列,1,1,2,3,5,8,13...這樣一個數(shù)列就是斐波那契數(shù)列,求第n項的值。

分析

從上文的數(shù)據(jù)中可以看出。我們所有的值都是前2項相加而來。所以我們要得到值的方式是 這樣的f(n) = f(n-1) +f(n-2) 這樣就很清晰了。 上手寫吧~
大白話:使用遞歸-不斷去得到前2個的值-最終返回一堆 1 、 0 相加 即可得到我們輸入n所對應(yīng)的value

//tips:寫的時候我們需要初始化好我們考試的數(shù)據(jù)。因為我們開始數(shù)據(jù)是 1  1 
function f1(n) {
    if(n < 1) {
        return 0;
    }else if(n == 1 || n == 2) {
        return 1;
    }
    return f1(n-1) + f1(n-2);

方法二實現(xiàn)

上面方法我們是使用遞歸的思路。當(dāng)然我們還可以使用循環(huán)得到我輸入n前2個的數(shù)字 相加即可這是不是暴力解法呢?
大白話:我們需要使用到1個變量temp 在循環(huán)中用來存儲當(dāng)前的res值-每次計算都需要額外去更新pre的值(可以理解為前一個值) res 只需要計算當(dāng)前自己和前1個的和

//tip: 我們依舊需要初始話好1 1   循環(huán)我們從第3個開始即可-不斷累加
function f2( n) {
    if(n < 1) {
        return 0;
    }else if(n == 1 || n == 2) {
        return 1;
    }
    let res = 1;
    let pre = 1;
    let temp = 0;
    for(let i = 3; i <= n; i++) {
        temp = res;
        res = pre + res;
        pre  = temp;
    }
    return res;
}

感悟:被虐也是一種學(xué)習(xí)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容