Top / Docs / 練習問題 / 解答例

練習問題の回答例#


フィボナッチ数列 課題3#

再帰版の利点
フィボナッチ数列の定義を直接に表現でき、読み書きに優れる。(この性質はこの問題に限らず、難問でも自然に思いつきやすい。)
再帰版の欠点
素朴な実装では同じ値を何度も計算するため計算量が指数的増加 O(1.618^n) となり、大きいフィボナッチ数の算出は文字通り桁違いに遅くなる(これは問題依存。再帰が常に爆発的計算量というわけではない)。なのでメモ化しよう!

また再帰が深くなるとコールスタックが溢れて関数呼び出し限界を迎えて異常停止する。関数呼び出し自体もオーバーヘッドがあり若干のコストだ。

反復版
途中結果を保持しながら順に計算するため計算量が線形 O(n) で高速。スタックオーバーフローの心配もない。ただし、数列の定義との対応は再帰版ほど直感的でない。
📝 このページに誤りを見つけたら…  GitHubで報告(エンジニア向け)  ・  フォームで報告