Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 do while循环_Javascript_Do While_Fibonacci - Fatal编程技术网

斐波那契序列Javascript do while循环

斐波那契序列Javascript do while循环,javascript,do-while,fibonacci,Javascript,Do While,Fibonacci,在这个主题上,我已经讨论了各种线程和语言,但是我似乎没有找到一个解决方案,可以在Javascript中使用do while循环将斐波那契序列的条设置为停止在100以下 var fbnci = [0, 1]; var i = 2; do { // Add the fibonacci sequence: add previous to one before previous fbnci[i] = fbnci [i-2] + fbnci[i-1]; console.log(fbnc

在这个主题上,我已经讨论了各种线程和语言,但是我似乎没有找到一个解决方案,可以在Javascript中使用
do while
循环将斐波那契序列的条设置为停止在100以下

var fbnci = [0, 1];
var i = 2;

do {
   // Add the fibonacci sequence: add previous to one before previous
   fbnci[i] = fbnci [i-2] + fbnci[i-1];
   console.log(fbnci[i]);
   fbnci[i]++;
} 
while (fbnci[i] < 100);
var fbnci=[0,1];
var i=2;
做{
//添加斐波那契序列:将上一个添加到上一个之前的一个
fbnci[i]=fbnci[i-2]+fbnci[i-1];
控制台日志(fbnci[i]);
fbnci[i]++;
} 
而(fbnci[i]<100);

出于某种原因,上面的代码只运行一次。我应该将while条件设置为什么,以便继续打印结果,直到其达到最接近100的值?

如果代码中有错误,则应为:

var fbnci = [0, 1], max = 100, index = 1, next;
do {
  index++;
  next = fbnci[index-2] + fbnci[index-1];
  if (next <= max) {
      console.log(next);
      fbnci[index] = next;
  }
} while(next < max);
var fbnci=[0,1],max=100,index=1,next;
做{
索引++;
next=fbnci[index-2]+fbnci[index-1];

如果(next对我来说,它是一个无限循环,不断打印出1。你需要增加i,而不是增加fbnci[i]:

i++
而不是
fbnci[i]++

此外,由于正在检查一个nil值,您仍然会失败while条件。您需要将while更改为检查fbnci[i-1]:


}while(fbnci[i-1]循环只发生一次,因为到
i=3
时,while条件无法检查fbci[3]<100
,因为
fbnci[3]
未定义的

你可以这样做

var fbnci = [0, 1];
var i = 1;
while(fbnci[i] < 100) {
  fbnci.push(fbnci[i] + fbnci[i-1]);
  i++;
}

console.log(fbnci);
var fbnci=[0,1];
var i=1;
而(fbnci[i]<100){
fbnci.push(fbnci[i]+fbnci[i-1]);
i++;
}
控制台日志(fbnci);

你的意思肯定是
i++;
而不是
fbnci[i]++;
?当然你的循环条件需要调整。我想你的意思是增加
i
而不是
fbnci[i]
在这里使用
do while
或普通
while
循环都没有多大区别。简单一点。这仍然不起作用。请在发布前尝试一下你的代码。啊,你是对的,检查在后面:),愚蠢的错误-修复,谢谢@BergiIt仍然打印超过100(在144处完成)为什么会这样?@HGB:因为它在找到一个大于100的元素后会停止。是的,它会一个接一个地运行,如果超过100,它会停止执行循环(但它已经赋值了).所以你的期望是在达到100以上之前停止?很好,每个人都专注于增加,但没有人考虑while检查。这只会给我一个'NaN'结果。@HGB真的吗?它对我有效(尽管它也显示144,现在被认为太过分了)因此,在这种情况下不可能使用while循环?您可以通过循环或函数来实现。函数具有更高的内存占用,因为您需要保留堆栈。循环的实现有点棘手,但这是可能的。循环也具有内存占用,因为您的斐波那契数组本质上是一个查找表。我投了反对票,因为当我测试时答案是,它仍然返回一个数组中大于100的额外对象