有一个正常工作的代码:
#include <iostream>
int sum_odd_digits(int n)
{
if(n==0) return 0;
else return (((n%2)!=0)?n%10:0) + sum_odd_digits(n/10);
}
int main(int argc, char ** argv)
{
std::cout<<sum_odd_digits(25897641)<<std::endl;
return 0;
}
但是,如果要删除外部括号,则i。 e。更换
else return (((n%2)!=0)?n%10:0) + sum_odd_digits(n/10);
与
else return ((n%2)!=0)?n%10:0 + sum_odd_digits(n/10);
程序开始给出错误的输出结果,即e。开始工作不正确。
为什么?这两条线有什么区别?
最佳答案
这是由于operator precedence造成的:+
的优先级高于?:
,因此您的错误版本可以解决:
((n%2)!=0) ? n%10 : (0 + sum_odd_digits(n/10));
^ ^
// addition is grouped first
现在的分组明显不同于第一个版本。
关于c++ - 三元运算符在递归中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62159524/