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

JavaScript recursive function using ternary operator

为什么return函数输出的递归函数中的三元运算符前要加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);
    }

递归函数是在执行过程中调用自身的函数。三元运算符决定函数是否需要调用自身。所以 return 语句调用相同的函数。

在示例中 n == 1 ? n : n + rec(n - 1); 如果 n=1 则函数应该 return n 的值,否则函数将使用新值 return 调用自身 n-1.

你需要 return 因为

n + rec(n - 1);

其中 rec(n-1) 调用需要 return 一个值才能计算 n + rec(n - 1),每次调用 rec() 直到 n ] 刚好 returns 1 时达到 1。

// 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);
    }

return 在三元运算中从不默认。 return 在箭头函数中是默认值,但在普通函数减速中不是默认值。 对于 return 正常函数执行的输出,总是需要添加 return 语句,但在箭头函数的情况下它是可选的。

function x() { 5;}
console.log(x()); // Opuput: undefined

let y = () => 5;
console.log(y()); // Output: 5

条件表达式(通常称为 ternary)只是一个表达式。它产生一个值,但不对其执行任何操作。事实上,除非它有副作用,否则它是完全没用的,除非你:

  • return 它来自一个函数,
  • 将其结果赋给一个变量,或者
  • 将它嵌套在另一个表达式中,您可以在其中执行其中一项操作

您可能会对以下事实感到困惑:箭头函数与单个表达式主体 return 该表达式的结果。它仍然被函数 return 编辑,即使您没有明确使用 return。由于这种简单性,条件表达式经常被用作箭头函数的主体。

但是你必须在这里 return 比你必须在

中拥有它应该更令人惊讶
function add (x, y) {
  return x + y;
}

如果你去掉那里的return,调用函数时仍然会发生加法,但不会产生任何值。和你原来的一样。