在c+中的特定递归调用中执行语句+; < >我在C++中创建了递归函数,并且希望在返回到函数的第一个递归调用后执行所有递归调用之后,只执行函数内的特定语句。基本上,我需要某种机制,通过这种机制,我可以只执行一次语句,但要在控件返回到第一个递归调用时执行。我尝试了静态,但它实际上为所有递归函数创建了一个副本,所以每次控件遇到我代码中的特定行时,它都会被更改,我不希望这样。我想要它一次,但是当控件返回到第一个递归调用时

在c+中的特定递归调用中执行语句+; < >我在C++中创建了递归函数,并且希望在返回到函数的第一个递归调用后执行所有递归调用之后,只执行函数内的特定语句。基本上,我需要某种机制,通过这种机制,我可以只执行一次语句,但要在控件返回到第一个递归调用时执行。我尝试了静态,但它实际上为所有递归函数创建了一个副本,所以每次控件遇到我代码中的特定行时,它都会被更改,我不希望这样。我想要它一次,但是当控件返回到第一个递归调用时,c++,recursion,C++,Recursion,是否有任何关键字或机制来处理此行为,或者我只能通过一些条件逻辑来处理此行为?这是怎么回事: void Plus(int Val, bool bFirstCall = true) { // Show the current depth for debugging purposes: std::cout << "current val: " << Val << std::endl; // Increase the depth and ca

是否有任何关键字或机制来处理此行为,或者我只能通过一些条件逻辑来处理此行为?

这是怎么回事:

void Plus(int Val, bool bFirstCall = true)
{
    // Show the current depth for debugging purposes:
    std::cout << "current val: " << Val << std::endl;

    // Increase the depth and call the recursive function with bFirstCall == false explicitly
    if (++Val < 100) Plus(Val, false);

    if (bFirstCall)
    {
        std::cout << "This is the first call" << std::endl;
    }
}
void Plus(int Val,bool bFirstCall=true)
{
//显示用于调试的当前深度:
std::cout这个呢:

void Plus(int Val, bool bFirstCall = true)
{
    // Show the current depth for debugging purposes:
    std::cout << "current val: " << Val << std::endl;

    // Increase the depth and call the recursive function with bFirstCall == false explicitly
    if (++Val < 100) Plus(Val, false);

    if (bFirstCall)
    {
        std::cout << "This is the first call" << std::endl;
    }
}
void Plus(int Val,bool bFirstCall=true)
{
//显示用于调试的当前深度:
为什么不

void real_recursive_call() {
    // do recursive work
}

void recursive_call() {
    real_recursive_call();
    do_something();
}

int main() {
    recursive_call();
}
为什么不

void real_recursive_call() {
    // do recursive work
}

void recursive_call() {
    real_recursive_call();
    do_something();
}

int main() {
    recursive_call();
}

查看您的代码将帮助我们帮助您更好地复制我不认为这是一个重复,因为这只是一个解决方案。不幸的是,问题如此广泛,但答案肯定不涵盖所有问题。查看您的代码将帮助我们帮助您更好地复制我不认为这是一个重复,因为只有一个解决方案。不幸的是,这个问题太广泛了,但这个答案肯定不能涵盖所有问题。如果出于某种原因,第一次调用
Plus()
是用第二个参数
false
调用的。没有什么可以阻止这一点。而且,这不会增加递归调用的成本,因为每个调用的堆栈都必须更大吗?没有额外的参数,因为我不想编辑调用,但是如果在主体内部使用变量会更好。例如,如果由于某种原因,
Plus()的第一次调用
是用第二个参数
false
调用的。没有什么可以阻止这一点。而且,这不会增加递归调用的成本,因为每个调用的堆栈都必须更大吗?没有额外的参数,因为我不想编辑调用,但是如果在主体内部为相同的工作使用一个变量会更好,我不会“我不想添加额外的函数,因为这会为我的所有递归函数添加2个函数,我的代码会变得混乱,甚至在某种程度上失去可读性。递归算法有一个“启动”函数是很常见的。有一个“启动”函数还允许您保持公共表面函数不受任何状态的影响,这意味着调用方不需要知道该状态是什么。对于相同的工作,我不想添加额外的函数,因为这会为所有递归函数添加2个函数,我的代码会变得混乱,甚至在某种程度上失去可读性为递归算法调用“startup”函数是很常见的。使用“startup”函数还可以使公共曲面函数不受任何状态的影响,这意味着调用方不需要知道该状态是什么。