[js] 第148天 请使用原生的js实现斐波那契数列
haizhilin2013 opened this issue · comments
haizhilin commented
第148天 请使用原生的js实现斐波那契数列
憨批必死 commented
let Fibonacci = num => {
if (!Fibonacci.sequence) Fibonacci.sequence = [1, 1]
if (Fibonacci.sequence[num] !== undefined) return Fibonacci.sequence.slice(0, num)
for (var i = Fibonacci.sequence.length; i < num + 1; i++) {
Fibonacci.sequence[i] = Fibonacci.sequence[i - 1] + Fibonacci.sequence[i - 2]
}
return Fibonacci.sequence.slice(0, num)
}
Joseph Compher commented
function Fibonacci (n) {
let arr = [1, 1]
for (let i = 2; i < n + 1; i++) {
arr[i] = arr[i - 1] + arr[i - 2]
}
return arr
//return arr[n]
}
forever-z-133 commented
// 使用同步缓存
function useCache(fn) {
var cache = {};
return function(){
var key = Array.prototype.join.call(arguments);
if (key in cache) return cache[key];
else return cache[key] = fn.apply(fn, arguments);
}
}
function fibonacci (n) {
if ( n <= 1 ) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
fibonacci = useCache(fibonacci);
憨批必死 commented
// 使用同步缓存 function useCache(fn) { var cache = {}; return function(){ var key = Array.prototype.join.call(arguments); if (key in cache) return cache[key]; else return cache[key] = fn.apply(fn, arguments); } } function fibonacci (n) { if ( n <= 1 ) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } fibonacci = useCache(fibonacci);
恁这不对吧,输出8是数列
Konata9 commented
const fib = (limit = 10, arr = [1, 1]) => {
// 使用循环
// if (limit < 3) {
// return arr;
// }
// const result = arr;
// while (result.length < limit) {
// const len = result.length;
// result.push(result[len - 1] + result[len - 2]);
// }
// return result;
// 使用递归
if (arr.length < limit) {
const len = arr.length;
return fib(limit, [...arr, arr[len - 1] + arr[len - 2]]);
} else {
return arr;
}
};
console.log(fib());
console.log(fib(9));
Kevlin commented
const fib=(n,sum1=1,sum2=1)=>{
if(n<1) return sum2
return fib(n-1,sum2,sum1+sum2)
}
ES6尾递归优化,严格模式有效
abueavan commented
function fibonacci(n) {
const fibSequence = [1];
let currentValue = 1;
let previousValue = 0;
if (n === 1) {
return fibSequence;
}
let iterationsCounter = n - 1;
while (iterationsCounter) {
currentValue += previousValue;
previousValue = currentValue - previousValue;
fibSequence.push(currentValue);
iterationsCounter -= 1;
}
return fibSequence;
forever-z-133 commented
#1180 (comment)
对的吧,举个反例贴一下吧,嘤嘤嘤
xiaoqiangz commented
function Fibonacci (n) { let arr = [1, 1] for (let i = 2; i < n + 1; i++) { arr[i] = arr[i - 1] + arr[i - 2] } return arr //return arr[n] }