Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 值较高的奇数Fibonnaci失败之和?_Javascript - Fatal编程技术网

Javascript 值较高的奇数Fibonnaci失败之和?

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

所以我遇到了一个奇数错误,我把所有的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 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(nrecursive
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()
函数是表示斐波那契数计算的逻辑方法,但与迭代方法相比,它不是非常有效,特别是因为您在循环内重复调用它。我认为这会使浏览器停止。每次调用
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:。我甚至没有正确思考哈。请随意将其作为答案发布,我会接受它。好的。我已经删除了我所有的评论,并在答案中添加了相同的信息。