web-dev-qa-db-ja.com

Pythonでの末尾呼び出し再帰のヒント

OK、Pythonには末尾呼び出しの最適化がありません。

しかし、「ループする」よりも再帰的に考える方にとって、コードを書くためのベストプラクティスは何ですか?

多くの場合、1000回のスタック呼び出しで十分ですが、Pythonで効率的に再帰を隠すためのヒントは何ですか?

4
Lucas Ribeiro

テール再帰アルゴリズムを書いているなら、おそらくこのようなことをしています

 def my_algo(whatever)
   if some_condition:
       return foo
   ...
   return my_algo(bar)

my_algoの呼び出しは必ず最後に返す必要があるため、これを次のように簡単に変換できます。

 def my_algo(whatever)
   while some_condition:
       ...
       whatever = bar
   return whatever

これは実際、基本的に、ほとんどのコンパイラのテールコール最適化で発生します。

7
Daniel Gratzer