時々、末尾再帰関数を書いていることに気づきます。高低を検索していて、.NET Frameworkに末尾再帰があることがわかりましたが、どのような場合に有効で、どのような場合に末尾再帰を効率的に使用できないのかわかりません。たとえば、私は単純な木を持っています、それを呼びましょう
public class Tree
{
public Tree parent = null;
public Tree(Tree parent)
{
this.parent = parent;
this.children = new List<Tree>();
}
public List<Tree> children {get; private set;}
public Tree root
{
get
{
return this.parent == null ? this : parent.root;
}
}
}
rootプロパティの場合、コンパイラはループを発行しますか?.tailを放出しますか?ジッタは.tailを尊重しますか?特別なことは何も起こらず、アルゴリズムは再帰的に実行されるだけでしょうか?最も重要なことは、これを反復的に書き直す必要がありますか?