如何在C++中找到递归函数的深度

Ari*_*911 11 c++ recursion

如何在不传递上一级的情况下在C++中找到递归函数内的当前深度?即,是否可以知道调用函数的次数而不使用参数来跟踪级别并在每次调用函数时将该数字作为参数传递?

例如,我的递归函数如下所示:

DoSomething(int level)
{
  print level;
  if (level > 10)
    return;
  DoSomething(++level);
}

main
{
  DoSomething(0);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 13

基于JoshD已经给出的答案:

void recursive() 
{ 
    static int calls = 0;
    static int max_calls = 0;
    calls++;
    if (calls > max_calls)
        max_calls = calls;

    recursive();

    calls--;
}
Run Code Online (Sandbox Code Playgroud)

这会在递归函数完成后重置计数器,但仍会跟踪递归的最大深度.

除了快速测试之外,我不会像这样使用静态变量,不久之后就会被删除.如果你真的需要持续跟踪这个,那么有更好的方法.


Jos*_*shD 6

你可以在函数中使用一个静态变量......

void recursive()
{
 static int calls = 0;
 calls++;
 recursive();
}
Run Code Online (Sandbox Code Playgroud)

当然,当你开始一个新的始发呼叫时,这将继续计数....

  • 这也不是可重入或线程安全的. (3认同)