我有一个递归功能,我正在排除故障.我想输出递归深度...即函数调用自身的次数.
如果我使用一个静态变量,该变量在函数顶部递增,在底部递减.
这会准确地给我深度水平吗?
recurse()
{
static int depth = 0;
depth++;
/*
do stuff
recurse()
*/
depth--;
return return_value;
}
Run Code Online (Sandbox Code Playgroud)
为了使它更容易和
如果你真的在扩展你的想象力,这可以使编译器更容易内联一些递归调用,和/或在尾递归的情况下执行尾调用优化.我没有证据证明它起了作用,但我可以想象从影响编译器优化的函数体中引用外部符号.
我建议:
stuff recurse(int level=0)
{
//...
recurse(level+1);
//... (return stuff?)
//... (throw exceptions?)
//...
recurse(level+1);
//... (return stuff?)
}
Run Code Online (Sandbox Code Playgroud)
不,它可能不会,如果抛出异常.更好(也更常见)的选择是:
int recurse(int depth=0)
{
recurse(depth+1)
return return_value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |