首页 > 解决方案 > 有人可以解释一下为什么是输出,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++recursionoutput

解决方案


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

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

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

推荐阅读