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

使用三元运算符的JavaScript递归函数,javascript,function,recursion,operator-keyword,ternary,Javascript,Function,Recursion,Operator Keyword,Ternary,为什么必须在递归函数的三元运算符之前添加return语句以返回函数输出 //这不起作用 功能记录(n){ n==1?n:n+rec(n-1); } //这是因为在三元运算符之前添加了return语句 功能记录(n){ 返回n==1?n:n+rec(n-1); } //这很有效 功能记录(n){ 如果(n==1)返回1; 返回n+rec(n-1); }递归函数是在执行过程中调用自身的函数。三元运算符决定函数是否需要调用自身。因此,return语句调用相同的函数 在这个例子中,n==1?n:n+r

为什么必须在递归函数的三元运算符之前添加return语句以返回函数输出

//这不起作用
功能记录(n){
n==1?n:n+rec(n-1);
}
//这是因为在三元运算符之前添加了return语句
功能记录(n){
返回n==1?n:n+rec(n-1);
}
//这很有效
功能记录(n){
如果(n==1)返回1;
返回n+rec(n-1);

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


在这个例子中,
n==1?n:n+rec(n-1)
如果
n=1
,则函数应返回
n
的值;如果不是,则函数将使用新值调用自身,该值为
n-1
,您需要返回,因为

n + rec(n - 1);
其中,
rec(n-1)
调用需要返回一个值才能计算
n+rec(n-1)
,这适用于每次调用
rec()
,直到
n
在返回1时达到1为止

//如果您希望在一行中执行此操作,则正确的解决方案是:
让rec=n=>n==1?n:n+rec(n-1);
//现在,您不需要在之前添加return关键字
//这是因为在三元运算符之前添加了return语句
功能记录(n){
返回n==1?n:n+rec(n-1);
}
//这很有效
功能记录(n){
如果(n==1)返回1;
返回n+rec(n-1);

}
在三值操作中,返回永远不是默认值。 返回在箭头函数中是默认值,但在正常函数中不是默认值。 要从正常函数执行中返回输出,始终需要添加return语句,但对于Arrow函数,它是可选的

函数x(){5;}
console.log(x());//输出:未定义
设y=()=>5;
console.log(y());//输出:5
条件表达式(通常称为
三值表达式)只是一个表达式。它产生一个值,但它不做任何事。事实上,除非它有副作用,否则它是完全无用的,除非你:

  • 从函数返回它
  • 将其结果赋给变量,或
  • 将它嵌套在另一个表达式中,在其中执行以下操作之一
您可能会被带有单个表达式体的箭头函数返回该表达式的结果这一事实所迷惑。它仍然由函数返回,即使您没有显式使用
return
。由于这种简单性,条件表达式经常被用作arrow函数的主体

但是,您必须在这里返回
,这应该不会比您必须在其中返回更令人惊讶

函数添加(x,y){
返回x+y;
}

如果在那里取出
返回值
,则调用函数时仍会进行添加,但不会产生任何值。在你的原版中也是一样。

为什么你希望递归函数在返回方面与非递归函数有任何不同?我的意思是,当三元运算符中默认返回时,为什么我必须额外添加它?