如何跟踪递归深度?

use*_*776 7 c++

我有一个递归功能,我正在排除故障.我想输出递归深度...即函数调用自身的次数.

如果我使用一个静态变量,该变量在函数顶部递增,在底部递减.

这会准确地给我深度水平吗?

recurse()
  {
  static int depth = 0;
  depth++;
  /*
  do stuff
  recurse()
  */
  depth--;
  return return_value;
  }
Run Code Online (Sandbox Code Playgroud)

rom*_*nsh 8

recurse(int depth = 0){
    ....
    recurse(depth+1);
}
Run Code Online (Sandbox Code Playgroud)


seh*_*ehe 8

为了使它更容易和

  • 异常更安全
  • 线程更安全
  • 支持树递归(!)

如果你真的在扩展你的想象力,这可以使编译器更容易内联一些递归调用,和/或在尾递归的情况下执行尾调用优化.我没有证据证明它起了作用,但我可以想象从影响编译器优化的函数体中引用外部符号.

我建议:

stuff recurse(int level=0)
{

     //...
     recurse(level+1);

     //... (return stuff?)
     //... (throw exceptions?)

     //...
     recurse(level+1);

     //... (return stuff?)

}
Run Code Online (Sandbox Code Playgroud)


Moo*_*uck 5

不,它可能不会,如果抛出异常.更好(也更常见)的选择是:

int recurse(int depth=0)
{
    recurse(depth+1)
    return return_value;
}
Run Code Online (Sandbox Code Playgroud)