Javascript 值较高的奇数Fibonnaci失败之和?
所以我遇到了一个奇数错误,我把所有的fibonnaci数相加,这些数都是奇数并且小于一个数 奇怪的是,这适用于较低的值,但当我达到超过10左右的上限时……它将崩溃codepen.io 以下是我到目前为止的情况:Javascript 值较高的奇数Fibonnaci失败之和?,javascript,Javascript,所以我遇到了一个奇数错误,我把所有的fibonnaci数相加,这些数都是奇数并且小于一个数 奇怪的是,这适用于较低的值,但当我达到超过10左右的上限时……它将崩溃codepen.io 以下是我到目前为止的情况: function f(n) { if(n <= 1) return n; return f(n-1)+f(n-2); } function sumFibs(num) { var counter = 0; var arr = []; //Get a
function f(n)
{
if(n <= 1)
return n;
return f(n-1)+f(n-2);
}
function sumFibs(num) {
var counter = 0;
var arr = [];
//Get all Fibbonaci Numbers up to num
for(let i = 1;i <= num;i++)
{
arr.push(f(i));
}
for(let j = 0;j < arr.length;j++)
{
if(arr[j] % 2 != 0 && arr[j] <=num)
{
counter+= arr[j];
}
}
console.log(counter);
return counter;
}
sumFibs(10);
函数f(n)
{
if(nrecursivef()
函数是表示斐波那契数计算的逻辑方法,但与迭代方法相比,它不是非常有效,特别是因为您在循环内重复调用它。我认为这会使浏览器停止。每次调用f()时,都在循环内
它通过递归调用自己,从头开始计算指定的斐波那契数。因此,比方说,为了得到f(10)
,它用f(9)+f(8)
调用自己两次(然后他们依次调用f(8)+f(7)
和f(7)+f(6)
,所以即使这样也非常低效),但事实上,您已经知道f(9)
和f(8)
是什么,因为您在以前的循环迭代中已将这些值存储在数组中
如果将循环更改为直接计算后续的每个数字,而不是调用另一个函数,则会得到更快的代码:
var arr = [1, 1]; // start with the known first two numbers
//Get all Fibbonaci Numbers up to num
for(let i = 2; i < num; i++) // start the loop at index 2 for the third number
{
arr[i] = arr[i-2] + arr[i-1];
}
递归f()
函数是表示斐波那契数计算的逻辑方法,但与迭代方法相比,它不是非常有效,特别是因为您在循环内重复调用它。我认为这会使浏览器停止。每次调用f()时,都在循环内
它通过递归调用自己,从头开始计算指定的斐波那契数。因此,比方说,为了得到f(10)
,它用f(9)+f(8)
调用自己两次(然后他们依次调用f(8)+f(7)
和f(7)+f(6)
,所以即使这样也非常低效),但事实上,您已经知道f(9)
和f(8)
是什么,因为您在以前的循环迭代中已将这些值存储在数组中
如果将循环更改为直接计算后续的每个数字,而不是调用另一个函数,则会得到更快的代码:
var arr = [1, 1]; // start with the known first two numbers
//Get all Fibbonaci Numbers up to num
for(let i = 2; i < num; i++) // start the loop at index 2 for the third number
{
arr[i] = arr[i-2] + arr[i-1];
}
嗯,不是吗?我不认为。我计算f(n)为每个“价值”上升到num?你能提供一个例子吗?也许我不理解你在说什么。你应该考虑使用<代码>记忆化< /代码>,或者一个<代码>迭代< /代码>方法。哇,我觉得很愚蠢,我在寻找FIB(n)并且看到f(n)=f(n-1)+f(n-2)。所以我真的在想,这意味着要为每个数字返回它…耶,你所做的完全有道理。:smacks head:。我甚至没有想对哈。请随意将它作为一个答案发布,我会接受它。好的。我已经删除了我所有的评论,并将相同的信息放在一个答案中。哈,我不是吗?我不认为。我为每个数字计算f(n)“价值”上升到num?你能提供一个例子吗?也许我不理解你在说什么。你应该考虑使用<代码>记忆化< /代码>,或者<代码>迭代< /代码>方法。哇,我觉得很愚蠢,我在寻找FIB(n),看到F(n)=f(n-1)+f(n-2)。所以我真的认为这意味着要为每个号码返回它…耶,你所做的完全有道理。:smacks head:。我甚至没有正确思考哈。请随意将其作为答案发布,我会接受它。好的。我已经删除了我所有的评论,并在答案中添加了相同的信息。