gpt4 book ai didi

c++ - 有没有可能解释为什么这会返回 21

转载 作者:行者123 更新时间:2023-12-01 14:04:22 27 4
gpt4 key购买 nike

你好,这不是作业或任何东西,但你能解释为什么这会返回 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<<" ";
}
}

最佳答案

fun()的流量:

  • 你路过 a它被初始化为 0 作为 fun() 的参数.所以,你打电话fun(0)来自 main() .
  • 通话中fun(0)条件n<2是真的,因为在开始时,它是 0。所以函数 fun(0)将要
    调用 fun(++n) ,即 fun(1)并将当前函数调用压入堆栈。 注意,被推送的函数调用中 n 的值增加到了 1。
  • 再次,n<2评估为真,因为现在 n 的值为 1。
    函数将调用 fun(++n)再次,那是 fun(2)并再次将当前函数调用压入堆栈。 注意,被推送的函数调用中 n 的值增加到了 2。
  • 现在,n 的值为 2,因此 n<2评估为假。所以,
    这次它不会做任何事情,只是终止
  • 现在,最后一个函数调用将从堆栈和 cout 中弹出。将被执行。因此,控制权返回到栈顶的函数,在我们的例子中是 fun(1) .但是,在这里我们增加了 n通过做++n (检查点:3)。所以打印的值将是 2。这个函数调用现在被终止。
  • 现在,栈顶是我们首先压入的函数调用,即 fun(0)但是我们的 n 值增加了 ++n (检查点:2)。所以现在将打印 n 的值为 1 的值。

  • 希望您能理解以上解释,从而解决您的疑问!

    关于c++ - 有没有可能解释为什么这会返回 21,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140151/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com