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
,调用函数时仍然会发生加法,但不会产生任何值。和你原来的一样。
为什么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
,调用函数时仍然会发生加法,但不会产生任何值。和你原来的一样。