为什么在 C++ 阶乘函数中出现编译错误?
Why am I getting a compilation error in a C++ factorial function?
我正在尝试使用三元运算符在 C++ 中编写一个简单的阶乘函数。它给出了一个编译错误。
int factorial(int n) {
(n == 0) ? return 1 : return n * factorial(n-1);
}
它说 Expected ':' to match this '?'
我是 C++ 的新手。
可能的修复:
if (n <= 1) return 1; else return n * f(n - 1);
或
return n <= 1 ? 1 : n * f(n - 1);
请注意,将阶乘实现为递归函数是一种常见的练习。无论如何,由于函数的快速增长,int
最多只能容纳 12!
,存储预先计算的值可能是一个更好的主意。
?:
是一个 三元运算符 ,它采用三个表达式并以某种方式计算它们以产生结果。 return 0
在你的例子中不是一个表达式,而是一个语句,所以你的语法不起作用并给出错误。它不能用于需要值的地方。
正确的代码及其语法应该如下:
int factorial(int n) {
return ((n <= 1) ? 1 : n * factorial(n-1) );
}
如果您像这样使用 if-else,您的代码将有效 -
int factorial(int n) {
if(n == 0) return 1; else return n * factorial(n-1);
}
if-else
在语义上不同于三元运算符 ?:
。您可以在 if-else
中使用语句,而另一方面,在三元运算符的情况下,您必须使用求值为某个值的表达式。
因此,当您使用语句 - return ((n <= 1) ? 1 : n * factorial(n-1) );
时,三元运算符将首先被计算 并且它会给出一个值(这就是为什么 三元运算符 中的表达式需要根据满足的条件求值 ) 并且该值最终由 return
.
希望您能理解其中的区别,这可以解决您的疑问!
我正在尝试使用三元运算符在 C++ 中编写一个简单的阶乘函数。它给出了一个编译错误。
int factorial(int n) {
(n == 0) ? return 1 : return n * factorial(n-1);
}
它说 Expected ':' to match this '?'
我是 C++ 的新手。
可能的修复:
if (n <= 1) return 1; else return n * f(n - 1);
或
return n <= 1 ? 1 : n * f(n - 1);
请注意,将阶乘实现为递归函数是一种常见的练习。无论如何,由于函数的快速增长,int
最多只能容纳 12!
,存储预先计算的值可能是一个更好的主意。
?:
是一个 三元运算符 ,它采用三个表达式并以某种方式计算它们以产生结果。 return 0
在你的例子中不是一个表达式,而是一个语句,所以你的语法不起作用并给出错误。它不能用于需要值的地方。
正确的代码及其语法应该如下:
int factorial(int n) {
return ((n <= 1) ? 1 : n * factorial(n-1) );
}
如果您像这样使用 if-else,您的代码将有效 -
int factorial(int n) {
if(n == 0) return 1; else return n * factorial(n-1);
}
if-else
在语义上不同于三元运算符 ?:
。您可以在 if-else
中使用语句,而另一方面,在三元运算符的情况下,您必须使用求值为某个值的表达式。
因此,当您使用语句 - return ((n <= 1) ? 1 : n * factorial(n-1) );
时,三元运算符将首先被计算 并且它会给出一个值(这就是为什么 三元运算符 中的表达式需要根据满足的条件求值 ) 并且该值最终由 return
.
希望您能理解其中的区别,这可以解决您的疑问!