直接上代码
var month = prompt("请输入月数:") function fibobo(x) {
//先定义一个已有前两项的数组,用来作缓存
var arr = [1, 1]; (function fib(n) {
if (n === 0 || n === 1) {
return 1;
} //第一次执行n >= 2的值后,就往arr数组中添加 fib(n-1)+fib(n-2) 的值
//即:如果arr数组中不包含 fib(n-1)+fib(n-2) 的值 ,就添加保存
if (!arr[n]) {
arr.push(fib(n - 1) + fib(n - 2));
return arr[n];
}
//当arr数组中保存有 fib(n-1)+fib(n-2) 的值 ,就直接返回该值
else {
return arr[n];
}
})(x); return arr[x - 1];
} console.time('优化后方案')
console.log(month+"个月后有"+fibobo(month)+"只兔子"); console.timeEnd('优化后方案') function fib(n) {
if (n<=2){
return 1 ;
}
return fib(n -1 ) + fib(n - 2);
} console.time('优化前方案')
console.log(month+"个月后有"+fib(month)+"只兔子");
console.timeEnd('优化前方案');
generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。
generator由 function* 定义(注意多出的*
号),并且,除了 return 语句,还可以用 yield 返回多次。
function* fib(max) {
var
t,
a = 0,
b = 1,
n = 0;
while (n < max) {
yield a; [a, b] = [b, a + b];
n ++;
}
return;
}
var f = [] for(var x of fib(200)){
f.push(x)
}
console.log(f)