【问题标题】:How does return works in JavaScript返回在 JavaScript 中是如何工作的
【发布时间】:2020-01-22 13:08:59
【问题描述】:

我有一个简单的递归函数,可以将它之前的所有数字相加。

function add(n) {
  if (n == 0) {
    return 1; // when it reaches here it should give me 1.
  }
  return n + add(n - 1);
}

console.log( add(5) ); // give me 16

当执行到第 3 行时,它应该返回 me 1,但返回 me 16。 return 在这里实际上是如何工作的?

【问题讨论】:

    标签: javascript recursion return


    【解决方案1】:

    递归在递归步骤调用中暂停程序并继续解决子问题,当满足基本条件时,所有返回语句将控制权返回给被调用者语句。

    所以

    add(5)-->return 5+add(4)
                         |-->return 4+add(3)
                                       |-->return 3+add(2)
                                                     |-->return 2+add(1)
                                                                     |-->return 1+add(0)//base condition, return 1 for add(0) which in return return 2
    
    1-->2-->4-->7-->11-->16 (In reverse)
    

    【讨论】:

    • 这只发生在recursive情况下?
    • 是的,递归就是以这种方式工作的。您可以点击此链接进行一些基本的了解。 freecodecamp.org/news/…
    • 你可能会想它,就像你想一个可以用 return 语句退出的 while 循环一样。而不是递归将其返回给调用函数,调用函数将其返回给它的调用函数,依此类推。至少当我开始递归时,这对我来说是个问题。
    【解决方案2】:

    那是因为您的第 3 行所在的条件语句说仅当传入的参数 n 等于 0 时才返回 1。您在代码末尾调用的函数传入的参数为5.

    第一个 return 语句只有在 if 语句中的条件为真时才有效,否则它会转到第二个 return,它在自身内部再次调用该函数。

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 2016-09-18
      • 1970-01-01
      • 2011-12-19
      • 2023-03-10
      • 1970-01-01
      • 2014-02-25
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多