js 斐波那契數列

 1. 打印斐波那契列表,使用es6的generator函數實現

function* fib(max) {
    let start = 0,
        a= 0,
        b= 1
    while(start < max) {
        yield b
        [a , b] = [b , a+b]
        start++
    }       
}
res = fib(10)
for(let i of res) {
    console.log(i)
}


2. 遞歸

function sum_fib(num) {
    if (num === 1 || num === 2) {
        return 1;
    } else {
        return arguments.callee(num - 1) + arguments.callee(num - 2)
    }
}


3 針對遞歸做一下優化

let cache = {}; // 數組,對象都可以
function fib(num) {
if(cache[num]) {
return cache[num];
if(num==1 || num==2) {
cache[num] = 1;
}else if(num>0) {
cache[num] = fib(num-1) + fib(num-2);
}
return cache[num];  
}
for(let i=1; i< 10; i++) {
console.log(fib(i))
}


當然也可以用個閉包,防止全局污染

let fn = (function(){
let cache = [];
return function fib(num) {
if(cache[num]) {
return cache[num];
if(num==1 || num==2) {
cache[num] = 1;
}else if(num>0) {
cache[num] = fib(num-1) + fib(num-2);
}
return cache[num];  
}
})()


for(let i=1; i< 10; i++) {
console.log(fn(i))
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章