タグ

C++とKowerKointに関するmohnoのブックマーク (1)

  • それ、非再帰で書けます - Qiita

    まだ再帰関数書いてるの? 再帰関数はプログラミング言語の有用な機能で、深さ優先探索をベースとする様々なアルゴリズムの実装として有用です。 その一方で、関数呼び出しはオーバーヘッドが大きく、定数倍が弱くなります。また、JavaPythonなどのスタック領域の制限が厳し目の言語では深すぎる再帰のせいでRuntime Errorが発生する場合があります。 C++などのコンパイル言語ではインライン展開によって関数呼び出しのオーバーヘッド解消されることもありますが、再帰関数は中でもインライン展開の難易度が高く、深い再帰ではそのまま実行せざるを得ない状況になります。 ところが、再帰関数は生のスタックを自分で用意するなどして非再帰に書き直すことができます。(「停止する再帰的処理は常に同じ時間・空間計算量の非再帰処理に書き換えられる」、真っぽいのですが厳密な証明が見つけられなかったのでもしかしたら反例が

    それ、非再帰で書けます - Qiita
    mohno
    mohno 2022/12/20
    再帰は知識として知るべきだし、分かりやすくなる場合はあるけど、業務では影響が明確でない限り使わないなあ。「富豪プログラミング」的には気にすべきじゃないかもしれないが。「再帰ではセグフォってしまいます」
  • 1