使用三元运算符的 JavaScript 递归函数

为什么要在递归函数中的三元运算符之前添加return语句才能返回函数输出?


// This dose not work


    function rec(n) {

      n == 1 ? n : n + rec(n - 1);

    }


// This works as return statement is added before ternary operator

    function rec(n) {

      return n == 1 ? n : n + rec(n - 1);

    }


// This works

    function rec(n) {

      if (n == 1) return 1;

      return n + rec(n - 1);

    }


largeQ
浏览 261回答 4
4回答

婷婷同学_

// If you would like to do this in one line then correct solution would be:    let rec = n => n == 1 ? n : n + rec(n - 1);// Now you dont need to add the return keyword before// This works as return statement is added before ternary operator    function rec(n) {      return n == 1 ? n : n + rec(n - 1);    }// This works    function rec(n) {      if (n == 1) return 1;      return n + rec(n - 1);    }

慕码人8056858

条件表达式(通常称为 a ternary)只是一个表达式。它产生一个值,但它不做任何事情。事实上,除非它有副作用,否则它完全没用,除非你:从函数中返回它,将其结果分配给变量,或将其嵌套在另一个表达式中,您可以在其中执行其中一项操作您可能会对具有单表达式主体的箭头函数返回该表达式的结果这一事实感到困惑。它仍然由函数返回,即使您没有明确使用return. 并且由于这种简单性,条件表达式经常被用作箭头函数的主体。但是,你必须在return这里拥有它并不比你必须拥有它更令人惊讶function add (x, y) {  return x + y;}如果你在那里取出return,当函数被调用时,添加仍然会发生,但它不会产生任何值。你的原作也是这样。

冉冉说

return 在三元运算中绝不是默认值。return 在箭头函数中是默认值,但在正常函数减速中不是默认值。要从正常的函数执行返回输出,总是需要添加 return 语句,但在箭头函数的情况下它是可选的。function x() { 5;}console.log(x()); // Opuput: undefinedlet y = () => 5;console.log(y()); // Output: 5

慕村225694

递归函数是在执行期间调用自身的函数。三元运算符决定函数是否需要调用自身。所以return语句调用了相同的函数。在示例中n == 1 ? n : n + rec(n - 1);,如果n=1然后函数应该返回的值,n如果不是,那么函数将使用新值调用自身n-1。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript