首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在计算Fibonacci系列时使用while循环?

如何在计算Fibonacci系列时使用while循环?
EN

Stack Overflow用户
提问于 2022-01-15 22:05:00
回答 3查看 104关注 0票数 0

我刚从Js开始,我遇到了Js的问题,找不到类似的解决方案,如果有人帮忙的话,我会很感激的。

代码语言:javascript
运行
复制
var i = 0;
var j = 1;
var k = 0;

function fibbo(n) {
  if (n === 1) {
    console.log([0]);
  } else if (n === 2) {
    console.log([0, 1]);
  } else {
    while (k <= n) {
      var l = [0, 1];
      var b = l.length;
      l.push(l[b - 2] + l[b - 1]);
      k++;
    }

  }
  return l;
}
fibbo(4);
console.log(l);

EN

回答 3

Stack Overflow用户

发布于 2022-01-15 22:32:17

如果在函数中使用变量,请确保在本地声明变量。您可以以不同的方式处理基本案例(设置length属性),还有最近的JS方法Array#at.:

代码语言:javascript
运行
复制
function fibo(n) {
    const l = [0, 1];
    while (l.length < n) l.push(l.at(-2) + l.at(-1));
    l.length = n; // for the case n < 2
    return l;
}
console.log(fibo(4));

票数 2
EN

Stack Overflow用户

发布于 2022-01-15 22:15:45

除了尝试访问函数之外的l之外,当向函数提供0或1时,返回语句中的l有时是未定义的。更重要的是,l不应该在while循环中定义,而应该在它的外部定义。

此外,您有未使用的变量,如ij,以及正在使用但其作用域有问题的k

increased

  • k用于跟踪迭代次数,而您的代码指出n应该是返回

的数字的数量。

这里有一种更简化的逻辑,假设n被认为是要返回的斐波纳契数:

如果是array

  • Otherwise或
  1. ,则返回种子
  2. ,只运行一个will循环,该循环仅在种子数组超过n时才停止运行。在while循环中,我们保留推送数字的逻辑,但否则不需要有任何其他变量为incremented.

参见概念证明示例:

代码语言:javascript
运行
复制
function fibbo(n) {
  if (n === 1) {
    return [0];
  } else if (n === 2) {
    return [0, 1];
  } else {
    const l = [0, 1];
    while (n > l.length) {
      const b = l.length;
      l.push(l[b - 2] + l[b - 1]);
    }
    return l;
  }
}
console.log(fibbo(4));

票数 1
EN

Stack Overflow用户

发布于 2022-01-15 22:26:26

使用while循环,我的看法如下:

n = 0 || n = 1If n > 1,它循环n - 1次数,在每次迭代中,它将现有序列中前两个值的总和添加到最后一个索引中。

循环完成后,整个序列被裁剪为n的长度并返回。(这最后一次修整部分最初在我的解决方案中缺失,并在阅读trincot的答案后添加)

代码语言:javascript
运行
复制
const fibbo = (n) => {
    const sequence = [0, 1];
    let i = 2;
    let next;
    
    while(i <= n) {
        next = sequence[i - 2] + sequence[i - 1];
        sequence[i++] = next;         
    }

    return sequence;
}

console.log(fibbo(6));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70725808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档