c++ - 三元运算符在递归中的奇怪行为

标签 c++ recursion

有一个正常工作的代码:

#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/

相关文章:

c++ - 在 C++ 中实现 FILE 指针

c++ - OpenMP 并行区域内函数的局部静态变量被修改 : race condition?

javascript - 无尽的控制台日志,javascript不会离开函数requestAnimationFrame

java - 递归方法未正确执行

python - 递归到迭代 - AVL 树 - isBalanced

c++ - 使用模板可视化代码中的2D和3D形状

c++ - "no operator "!= "matches these operands"用于迁移到 VS2015 后的迭代器比较

c++ - Boost asio async_read (async_write) 包装器

java - 如何计算递归函数的大 O 表示法?

php - 这是 PHP 递归的废话吗?