Javascript 如何向斐波那契序列添加停止指令?
我试图使用递归来实现斐波那契算法。我想将所有斐波那契函数打印到这个res变量,当我通过这个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));
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(b fibs(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刚刚更正,我的意思是第二个解决方案,我在那里添加了什么。谢谢你指出这一点!