Javascript 如何将数组中的斐波那契序列限制在一个数字以下

Javascript 如何将数组中的斐波那契序列限制在一个数字以下,javascript,arrays,Javascript,Arrays,我编写了一个斐波那契序列javascript解决方案。我能够推出一个斐波那契序列数组。但是,此解决方案会在数组中添加一个超出限制数量的额外数字 例如,如果我希望数组中的所有数字都小于10,那么数组应该是[0,1,1,2,3,5,8]。然而,在我的解决方案中,它仍然输出数组中额外的“13” 函数fib(num){ var x=0; 变量y=1; var fibarray=[0,1]; while(y

我编写了一个斐波那契序列javascript解决方案。我能够推出一个斐波那契序列数组。但是,此解决方案会在数组中添加一个超出限制数量的额外数字

例如,如果我希望数组中的所有数字都小于10,那么数组应该是[0,1,1,2,3,5,8]。然而,在我的解决方案中,它仍然输出数组中额外的“13”

函数fib(num){
var x=0;
变量y=1;
var fibarray=[0,1];
while(y控制台日志(fib(10))之所以发生这种情况,是因为您正在计算下一个y,将其推送到数组中,然后检查y是否小于num,但此时您已经将y添加到数组中。解决方案是检查y是否小于num,然后将其推送到fibarray,然后计算下一个y,同时再次检查条件

函数fib(num){
var x=0;
变量y=1;
变量fibarray=[0];
while(y控制台日志(fib(10))
它添加13,因为您在与
num
进行比较后修改了
y
。 解决办法是:

function fib(num) {
  var x = 0;
  var y = 1;
  var fibarray = [0, 1];

  while(true) {
    y += x;
    x = y - x;
    if(y>num) return fibarray;
    fibarray.push(y);
  }
}

…或者您可以检查
y+x<10
而不仅仅是
y<10

函数fib(num){
var x=0;
变量y=1;
var fibarray=[0,1];
而(y+x控制台日志(fib(10))将此if语句放在while循环中,以检查新的y是否小于num

函数fib(num){
var x=0;
变量y=1;
var fibarray=[0,1];
while(y如果(y如果我正确理解了你的问题,原因是“while(y
您有两个选项,要么在push语句之前(但在“x=y-x;”之后)包含一个表示退出循环的if语句(例如,“if(y>=10){break;}”),要么您可以将循环设置为小于8的数字。

函数fib(num){
var x=0;
变量y=1;
var fibarray=[0,1];
while(y
var-arr=[0,1];
风险价值限额=33;

而(arr[arr.length-1]+arr[arr.length-2]更改为“因为您在与
num
进行比较后修改了
y
”你在
之后增加
y
,当
确保它在范围内时,我会避免使用相同的条件两次,而使用Dij或我的解决方案。@Stephan,为什么我要避免使用相同的条件两次?Dij是什么?对我来说,没有安全理由可以避免,而且Dij的想法对min来说是一个非常好的主意这只是一个美学上的注意,它是(不仅仅是计算上的)比必要的更复杂。尽管这与这么小的片段无关,但我个人更喜欢更容易理解和维护的解决方案。对于Dij的解决方案,我指的是这个问题最古老的答案。Stephan你是对的,如果我有选择的话,我会更喜欢Dij,并且会建议在编程中始终使用一个词d“不要重复你自己”,但它也是一个没有错误的工作代码。如果你添加一些解释,它将帮助学习者。只有代码的答案通常没有帮助。