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