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))
}