斐波那契数列
1, 1, 2, 3, 5, 8, 13, ....
也就是,第 n 个数由数列的前两个相加而来:
f( n ) = f( n - 1 ) + f( n - 2 )
完成 fibonacci 函数,接受 n 作为参数,可以获取数列中第 n 个数,例如:
fibonacci( 1 ) // => 1
fibonacci( 2 ) // => 1
fibonacci( 3 ) // => 2
...
最简单的递归实现
// 多次调用函数存在重复计算,耗时严重
const fibonacci = ( n ) => {
return n < 3 ? 1 : fibonacci( n - 1 ) + fibonacci( n - 2 );
}
记忆化斐波那契函数
// 即 缓存已计算的斐波那契数列
cache = [ 1, 1, 2, 3, 5, 8, 13, .... ];
for 实现 + 闭包数组缓存
const fibonacci = ( function(){
var cache = [];
return function( n ){
var i;
if( n < cache.length ){
return cache[ n ];
}
if( n < 2 ){
return cache[ n ] = n;
}
for( i = cache.length - 1; i < n; i++ ){
cache.push( cache[ i ] + cache[ i - 1 ] );
}
return cache[ n ];
}
})();
递归实现 + 闭包类数组缓存
const fibonacci = ( function(){
var cache = {};
return function( n ){
if( cache[ n ] ){
return cache[ n ];
}
if( n < 2 ){
return cache[ n ] = n;
}
return cache[ n ] = fibonacci( n - 1 ) + fibonacci( n - 2 );
}
})();
递归实现 + 闭包类数组缓存 + 箭头函数缩写
const fibonacci = (( cache = {} ) => n => {
if( cache[ n ] ){
return cache[ n ];
}
if( n < 2 ){
return cache[ n ] = n;
}
return cache[ n ] = fibonacci( n - 1 ) + fibonacci( n - 2 );
})();