Javascript 如何向斐波那契序列添加停止指令?

Javascript 如何向斐波那契序列添加停止指令?,javascript,recursion,Javascript,Recursion,我试图使用递归来实现斐波那契算法。我想将所有斐波那契函数打印到这个res变量,当我通过这个num参数时停止。我想知道我该怎么做?此代码: function fibs(num) { let i = 2; let res = 0; while (res < num) { res = fibs(i - 1) + fibs(i - 2); i++; } return res; } console.log(fibs(10));

我试图使用递归来实现斐波那契算法。我想将所有斐波那契函数打印到这个res变量,当我通过这个
num
参数时停止。我想知道我该怎么做?此代码:

function fibs(num) {
    let i = 2;
    let res = 0;
    while (res < num) {
        res = fibs(i - 1) + fibs(i - 2);
        i++;
    }
    return res;
}
console.log(fibs(10));
函数fibs(num){
设i=2;
设res=0;
while(res
我收到超过最大调用堆栈大小的错误。

请尝试下面的代码

函数fibs(num){
设a=0,b=1;
控制台日志(a);
while(bfibs(100)注释:

⚠️ 通过使用第一个解决方案,并犯一些小错误,例如添加一个大数字,您仍然可以超过最大调用堆栈大小。如果你想一想递归函数的含义,它一次又一次地调用自己,另外它还有很高的计算时间


当需要大量调用时,使用递归不是合适的方法。 这将使您的代码工作速度变慢,在某些情况下,达到最大调用堆栈大小而没有得到响应。 正确的方法是使用数组,如下所示:

function fibs(num) {
    let i = 1;
    let arr = [1, 1];

    while (arr[i] < num) {
        arr.push(arr[i-1] + arr[i]);
        i++;
    }
    return arr[i];
}
函数fibs(num){
设i=1;
设arr=[1,1];
while(arr[i]
以下是一段你应该写些什么来完成你的任务
函数fibs(num){
设res=0;
设a=0,b=1;
while(res控制台日志(fibs(10))因为它不是一个递归,而是一个您正在处理的无限循环

您的代码增加了i(i++),但它没有在while循环中进行检查

您可以尝试以下方法:

function fibs(num) {
if (num>1) {
    return (fibs(num - 1) + fibs(num - 2));
}
return num;

}其他答案解释了代码出现问题的原因

下面是一种编写递归函数的简单方法,该函数可以捕获最多为
num
的斐波那契数:

const fibsTo=(num,a=0,b=1)=>
a>num
? []
:[a,…fibsTo(num,b,a+b)]

log(fibsTo(10))
建议:如果您提供了jsperf.com或jsbench.me运行的结果,请在此处包含指向它的链接。这里有一个包含更好的递归版本:。注意另外两件事:(1)问题似乎是问小于等于
n
的斐波那契数,而不是第一个
n
斐波那契数。(2) 你的递归函数和非递归函数计算的是完全不同的东西;这不是一个公平的比较。“使用第二个例子”-这在这里意味着什么?请澄清,因为我在问题中没有看到第二个例子。@Markschultheis刚刚更正,我的意思是第二个解决方案,我在那里添加了什么。谢谢你指出这一点!