为什么我在C++阶乘函数中出现编译错误?

Why am I getting a compilation error in a C++ factorial function?

本文关键字:编译 错误 函数 C++ 阶乘 为什么      更新时间:2023-10-16

我正在尝试使用三元运算符在C++中编写一个简单的阶乘函数。它给出编译错误。

int factorial(int n) {
(n == 0) ? return 1 : return n * factorial(n-1);
}

它说Expected ':' to match this '?'我是C++新手。

?:

是一个三元运算符,它采用三个表达式并以某种方式计算它们以产生结果。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返回。

希望您了解其中的区别,这可以解决您的疑问!

可能的修复:

if (n <= 1) return 1; else return n * f(n - 1);

return n <= 1 ? 1 : n * f(n - 1);

请注意,将阶乘实现为递归函数是一种常见的练习。无论如何,由于函数的快速增长,一个int最多只能容纳12!,存储预先计算的值可能是一个更好的主意。