Javascript 斐波那契序列与带reduce()的第n个数 const generatefbonnacisequence=(n)=>{ 返回[ (arr=新数组(n).填充(1).减少((arr,i)=>{ arr.push(i

Javascript 斐波那契序列与带reduce()的第n个数 const generatefbonnacisequence=(n)=>{ 返回[ (arr=新数组(n).填充(1).减少((arr,i)=>{ arr.push(i,javascript,fibonacci,Javascript,Fibonacci,我正在使用递归和尾部调用优化。这段代码不应该有fib(1000)和更多的问题 函数fib(n){ 让结果=新数组(2); 结果[0]=“0”; 结果[1]=fibImp(0,1,n); 返回结果; 函数fibImp(a,b,n){ 如果(n==0) 返回a; 结果[0]+=b+“”; 返回fibImp(b,a+b,n-1); } } [序列,结果]=fib(8); console.log(序列); console.log(result);code-Reviews->arr应该去哪里?你真的需要

我正在使用递归和尾部调用优化。这段代码不应该有fib(1000)和更多的问题

函数fib(n){
让结果=新数组(2);
结果[0]=“0”;
结果[1]=fibImp(0,1,n);
返回结果;
函数fibImp(a,b,n){
如果(n==0)
返回a;
结果[0]+=b+“”;
返回fibImp(b,a+b,n-1);
}
}
[序列,结果]=fib(8);
console.log(序列);

console.log(result);
code-Reviews->arr应该去哪里?你真的需要
reduce
吗?顺便说一句,
arr
是一个全局变量。如果不需要,只需
pop
最后一个值。此代码存在“太聪明”的问题;它试图在一行中做太多的事情,并因此受到影响。只需使用多行,使您的语句(和变量名)清晰明了。将其保存为精简代码。
const generateFibonnaciSequence = (n) => {
    return [
        (arr = new Array(n).fill(1).reduce((arr, _, i) => {
            arr.push(i <= 1 ? 1 : arr[i - 2] + arr[i - 1]);
            return arr;
        }, [])),
        arr[n - 1],
    ];
};

const [fibonacciSequence, fibonacciNthNumber] = generateFibonnaciSequence(n);