当我创建递归方法时,我经常包含一个Depth参数,特别是当我需要某种救助机制时.代码通常是这样的
procedure Recurse(<Params>; aDepth : integer = 0);
begin
if aDepth > SomeLimit then
begin
//Tidy up, return best result found>
exit;
end;
<stuff>
if <Condition> then
Recurse(<Params>; aDepth+1)
else
begin
//Tidy up, return result of endnode>
end;
end;
Run Code Online (Sandbox Code Playgroud)
我称之为没有Depth参数
Recurse(<Params>);
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以轻松找到深度吗?
如果你有办法走栈,看看你的函数的入口点在那里多少次,我想你可以这样做.但是你会注意到你的aDepth参数也是正确的,你会发现aDepth比窥探堆栈更简单,更麻烦.IMO,简单的解决方案在这里是最好的,它是可移植的,面向未来的,不像你可以发明的任何堆栈侦听解决方案.
所以是的,还有其他方法,但你最初的解决方案是最好的,IMO.