可以解释为什么返回21

问题描述 投票:0回答:3

您好,这不是一项作业或其他任何内容,但是您能解释一下为什么返回2 1的原因吗?我很困惑,我很讨厌递归。

#include <string>
using namespace std;
void fun(int);
int main() 
{
    int a = 0;
    fun(a);
    return 0;
}

void fun(int n)
{
    if (n < 2)
    {
        fun(++n);
        cout << n<<" ";
    }
}
c++ explain
3个回答
0
投票

此代码不返回任何东西,除了返回0退出代码的main函数。函数funprints >>。

它打印2 1,因为它计算此:

void fun0()
{
   fun1();
   cout << 1 <<" ";
}

void fun1()
{
   cout << 2 <<" ";
}

因此,它从fun1返回代码后首先打印2,然后打印1。


0
投票

每次您进行递归调用时,都会创建一个新的n实例。程序仅在两次递归调用之后才到达第一个cout,因此此时n为2。我不想详细解释所有工作原理,我真的认为,如果您编写更多的printf,则可以自己弄清楚程序在做什么。如果您通过我的简单提示自己弄清楚了这一点,您将知道递归如何很好地进行。


0
投票

您正在将初始化为0的a作为fun()的参数。

© www.soinside.com 2019 - 2024. All rights reserved.