有人能解释一下为什么是输出的,C++递归函数



运行此代码后,我不明白为什么

int n;
int f(int x) 
{ 
int n; 
if (x > 0) 
{
if (x % 2 == 0) 
{
cout << x % 10;
n = 1 + f(x / 10); 
} 
else 
{
n = 1 + f(x / 10);
cout << x % 10; 
}
return n; 
} 
else return 0;
}
int main()
{
cout << ' ' << f(8174);
return 0;
}

我得到的是4817 4而不是48174

我需要更多的单词,但我不知道该说什么:(

在C++17之前,未指定参数求值的顺序。这意味着编译器可以在std::cout << ' '之前或之后运行f(8174)(以及它的所有std::cout << ...语句(。

修复方法相当简单,您需要将cout拆分为两个语句:

int main()
{
std::cout << ' ';
std::cout << f(8174)
return 0;
}

最新更新