0
完全なテール再帰ではない関数でg ++でテールコールの最適化を行うにはどうすればよいですか?例えば再帰関数の部分的なテールコールの最適化はありますか?
:
void foo(Node *n) {
if (n == nullptr) return;
foo(n->left);
cout << n->datum;
foo(n->right);
}
これがfooでは、(N->左)末尾再帰ではありませんが、FOO(N->右)です。これを最適化する方法はありますか?
あなたがこのことを妄想しているなら、あなたはいつもあなたの再帰関数を反復的なものに変えることができます(明確にするために、私はそれをすることを推奨していません)。 – bolov
g ++ [可能であれば再帰を避けるために、-O3上で(https://godbolt.org/g/TEJvLv)を実行してください。 -O2では、ちょっとばかげて、2回目の呼び出しをジャンプに変えたばかりです。 –