gpt4 book ai didi

c++ - 令人困惑的 C++ 情况

转载 作者:行者123 更新时间:2023-11-27 23:28:53 27 4
gpt4 key购买 nike

这是一个非常愚蠢的问题,但我需要一点安慰/帮助。我有当前的“递归”情况:

void add( int value )
{
// do something ... //

if ( condition ) {
add(myVal);
acc = 0;
}
}

我的问题是变量 acc 最终是否会被设置为零。应该的吧?即使条件第二次不成立(在递归时)。它会完成执行该功能并继续将 acc 设置为 0 ..我想/希望?

谢谢!

编辑:我没有发布完整的代码,因为我认为没有必要。有点长。值得一提的是,条件 并不总是为真。因此,这个递归不是无限的。

编辑 2:最大递归次数为 2。也就是说,如果条件第一次成立,则第二次(递归时)结果为假,从而避免了无限循环。澄清我的问题:考虑条件首先为真,所以递归发生的情况。函数完成(递归期间结果将为假)并退出后,它将退出到原始函数,并且也将退出。退出时,是否会从中断处继续,即设置acc=0,然后返回?下面的一个答案对此提供了很好的解释。

最佳答案

假设对 add 的递归调用返回,是的,首先进行递归调用的函数内部的 acc 的值确实将设置为零。您可以认为代码是这样工作的:

if ( condition ) {
make a call to add(myVal);
wait for that call to return;
acc = 0;
}

不过,一个重要的细节是,假设 acc 是函数中的一个局部变量,它只会在 calling 函数中被设置为零,而不是你所做的递归调用。例如,如果您的代码如下所示:

void add( int value )
{
int acc = 1;
cout << acc << endl;

if ( condition ) {
add(myVal);
acc = 0;
}
}

然后,如果您确实进行了您指定的递归调用,则递归调用中 cout 语句的输出仍将是 1,因为 的值此特定递归调用中的 acc 独立于其他递归调用中的 acc 的值。

希望这对您有所帮助!

关于c++ - 令人困惑的 C++ 情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235188/

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