返回 sum [duplicate] 的 for 循环函数

for loop function that returns sum [duplicate]

提问人:JavaScriptStudent 提问时间:11/2/2022 更新时间:11/3/2022 访问量:131

问:

我有一个需要作为输出的序列。这是 8 所以我所做的(当然是在朋友的帮助下......bec,我不聪明,有多动症......是这样的:

let a = 1;
let b = 1;
let c = a + b;
a = b; // 1
b = c; // 2
c = a + b; // 3
a = b; // a = 2
b = c; // b = 3
c = a + b; // 2 + 3 = 5    c = 5

接下来我需要做的是制作一个 for 循环,将其计算为 8(执行与上面完全相同的计算任务(a = b and b = c and c = a + b)

使函数得到打印输出 8..

let a = 1;
let b = 1;
let c = a + b;
a = b; // 1
b = c; // 2
c = a + b; // 3
a = b; // a = 2
b = c; // b = 3
c = a + b; // 2 + 3 = 5    c = 5
function calc () {
    for (let i=0; i<= ( ? ? ? ? ? ?); i++){
            console.log(i);
        }
    }
calc()
JavaScript for 循环 序列

评论

2赞 Barmar 11/2/2022
这是斐波那契数列,对吧?你试过谷歌搜索吗?
0赞 JavaScriptStudent 11/2/2022
@Barmar是的,我现在已经尝试了我所拥有的一切。这太令人沮丧了。答案将帮助我弄清楚接下来的任务。我不关心这个特定的任务。我只需要知道循环是如何工作的,要弄清楚,我需要知道如何完成这项工作。我做对了吗?循环本身缺少括号,但我说的是整个代码。另外,括号中需要包含什么?

答:

1赞 Alexey Zelenin 11/2/2022 #1

function calc () {
  for (let a = 0, b = 1, c = 0; c < 8;) {
    c = a + b;
    a = b;
    b = c;
    console.log(c);
  }
}
calc();

它能根据您的需要工作吗? 这里的主要思想是:在循环中,您可以使用任何变量来设置初始状态、增量和中断条件。

更新

循环只是重复你所做的没有循环。让我们看看代码的每个部分都去了哪里。

循环声明包含 3 个部分。

  1. 初始化
let a = 1;
let b = 1;

我刚刚更新为 0,而不是 1。因此,数字 1 将显示在您的控制台中。a

  1. 退出条件。

正如你所描述的,当我们到达 8 时,循环应该结束。我们将循环中的值递增,然后显示它。所以条件应该是 .c < 8

  1. “增量”

就您而言,它是

let c = a + b;
a = b; // 1
b = c; // 2

此块重复多次,并包含 1 个以上的赋值。因此,我们将其放入块中,并将“增量”部分留空。

评论

0赞 JavaScriptStudent 11/2/2022
泽尔宁:是的,但你为什么把它弄得这么复杂?我问的只是我应该在我的电流循环函数中输入的数字是多少。我现在不可能再理解它了
0赞 Tom 11/2/2022 #2

听起来您正在尝试输出斐波那契数列(1、1、2、3、5、8、13...),其中序列中的每个数字都是前两个数字的总和。


function calc() {
    // We need to hard-code the first two numbers in the sequence to get started
    let a = 1;
    let b = 1;
    console.log(a);
    console.log(b);

    // If we do 4 loops, the last value printed will be 8
    for (let i = 0; i < 4; i++) {
        let c = a + b
        console.log(c);
        // Shift a and b along the sequence
        // a gets the value held by b, and b gets the value held by c
        a = b
        b = c
    }
}
calc();

如果您希望它只打印出 8。

function calc() {
    let a = 1;
    let b = 1;

    for (let i = 0; i < 4; i++) {
        let c = a + b
        a = b
        b = c
    }
    console.log(b);  // Prints 8
}
calc();

评论

0赞 JavaScriptStudent 11/2/2022
好的,但是如果我想遵循这个确切的分配(没有 DOM 部分)而不是硬编码 Y(X 的斐波那契的结果),而是用 for 循环计算它 计算应该包装在一个函数中,该函数将 X 作为参数,并返回 Y 在函数之后,您应该调用该函数, 并在 HTML 中分配返回的值以呈现给用户,我该怎么办?我说的是函数部分的调用。谢谢。
0赞 Carsten Massmann 11/2/2022 #3

是的,斐波那契数列 - 多么有趣! 这是一个略微精简的版本,只有两个变量(和):ab

function calc (max) {
  for (let a = 0, b = 1; b < max;) console.log(([a,b] = [b,a+b])[1])
}
calc(100);

更新

这里有一个版本,它只会返回最后两个值(供以后在您的 HTML 中使用):目标值下方的最后一个值和目标值上方的第一个值:max

function calc (max) {
  for (var a = 0, b = 1; b < max;) [a,b] = [b,a+b];
  return [a,b];
}
console.log(calc(100));

对不起,让你超负荷。我不得不承认,我没有仔细阅读你问题中的所有文字。特别是你的多动症情况。不用担心,我会尝试更详细地解释我现在做了什么,以便您能够遵循:

1. 我的循环设置在一个循环中 - 就像在 Alexey 的解决方案中一样:for()
for (var a = 0, b = 1; b < max;)

这意味着

  • 最初变量 和 将被设置为包含值 和 (两个赋值者由 -opertor 分隔)。ab01,
  • 表达式 () 的第二部分检查是否仍低于最大值,然后才会执行循环表达式。forb < maxbmax
  • 第三个表达式(在 -separator 后面)不存在。;
2.循环表达式...
[a,b] = [b,a+b]

...利用了 ES6 新增的解构特性。它是其他三个单独的分配语句的简写版本:

 tmp = b;  // buffer the value of b 
 b = a+b;  // do the sum and re-assign to b
 a = tmp;  // assign the original value of b to variable a

ES6 结构在这里很有帮助,

  • 因为它在将计算结果分配给等式左侧的数组之前缓冲了右侧的计算结果。
  • 只有这样(在解构阶段),新计算的值才会被分配给变量和 。ab
3. 返回值

由于我不确定您希望从函数返回哪个值,因此我选择在数组中返回两个值:一个低于目标值,一个高于目标值。max

return [a,b];

您可以自行调整 return 语句以更好地满足您的需求:要么 要么 .return a;return b;

4. 代替varlet

请注意,我在更高版本的循环中使用了 INSTEAD 而不是在循环中,因为我需要在循环范围之外访问这些变量。定义一个具有函数作用域(而不是块作用域)的变量。var a=0, b=1let a=0, b=1for()for()var

我希望这能比我公认的相当隐晦的第一个版本更能帮助你。

替代版本(变体)

如果您正在寻找一个可以重新调整斐波那契数列的第 n 个值的函数,您可以这样做:

function fib (n) {
  for (var a = 0, b = 1; n--;) [a,b] = [b,a+b];
  return b;
}

// test the function fib with n = 1, ..., 19
for (let i=1; i<20; i++) console.log(`fib(${i}):`,fib(i));

评论

0赞 JavaScriptStudent 11/2/2022
你让它更短,但更难理解。括号和括号是干什么用的?另外,右边带括号的 1 是什么?我无法理解..请阅读: 与其硬编码 Y(X 的斐波那契的结果),不如用 for 循环计算 计算应该包装在一个函数中,该函数将 X 作为参数,并在函数之后返回 Y,您应该调用该函数,并在 HTML 中分配返回值以呈现给用户,这意味着所有值都需要在函数中有所不同。我该怎么做?