【问题标题】:Print Fibonacci Sequence to (n)将斐波那契数列打印到 (n)
【发布时间】:2021-06-14 07:57:23
【问题描述】:

我被要求在斐波那契数列的控制台上打印一个列表,直到给定的数字。

我花了一段时间才想出一个解决方案,我很高兴能写出一些可行的东西。

我在尝试合并 while 循环时遇到了困难,最终使用了带有 if 语句的 for 循环。

我有两个问题:

  1. 用 while 循环试试这个是否明智?
  2. 如果没有预先设置的数组以及序列中的前两个数字,如何创建这个序列?

谢谢! 顺便说一句,这是我在 StackOverflow 上的第一篇文章,因此也欢迎任何有关发布礼仪的反馈。


function fibbonaciToNum(num) {
    let current = 0;
    let arr = [0, 1];
    for (let i = 1; i < arr.length; i++) {
        current = arr[i] + arr[i - 1]
        if (current <= num) {

            arr.push(current);
        }
    }
    return arr;
}

console.log(fibbonaciToNum(34));

【问题讨论】:

  • 老实说,为什么给学生提供斐波那契数列的唯一目的或多或少是为了让他们了解递归的工作原理。我会研究一下,但对创造力的赞誉。
  • 其中包含arr.length 的循环条件,然后在循环中推送到数组,这有点误导,因为这对于阅读代码的人来说是意外的(代码for (let i = 1; i &lt; arr.length; i++) 只是如此刻板,以至于人们期望arr.length是静态的)。但是,没有错误可以按照您的方式进行操作。 while 的替代方案是 let next; while ((next = arr[arr.length - 1] + arr[arr.length - 2]) &lt;= num) arr.push(next);。我认为前两个预设没有任何问题。

标签: javascript for-loop if-statement while-loop fibonacci


【解决方案1】:
  1. 是的,可以使用 while 循环,我建议在这种情况下使用它。
const fib = (upTo) => {
    let n1=0, n2=1, n3;
    n3 = n1 + n2; 
    while (n3 <= upTo) {
        console.log(n3); 
        n1 = n2;  
        n2 = nextTerm; 
        n3 = n1 + n2; 
    }
}
  1. 斐波那契数列也由一个非常长且硬的方程定义,它不依赖于序列的先前元素。所以理论上,是的,这是可能的,但我强烈建议不要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多