创建递归方法时,通常会包含一个深度参数,尤其是当我需要某种形式的纾困机制时。该代码通常是这样的

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;


我称它为没有深度参数

Recurse(<Params>);


有没有其他方法可以轻松找到深度?

最佳答案

如果您有一种方法可以遍历堆栈并查看函数的入口在其中有多少次,那么我想您可以这样做。但是随后您会注意到aDepth参数也在那里,并且您将意识到aDepth比监听堆栈更容易,麻烦也更少。
IMO,最简单的解决方案是这里最好的解决方案,它具有可移植性且面向未来,与您可以发明的任何堆栈侦听解决方案不同。
是的,还有其他方法,但是您的原始解决方案是最好的,IMO。

10-08 04:48