#author("2026-06-24T10:11:08+09:00;2023-02-23T23:33:35+09:00","default:vip","vip")
#author("2026-06-24T10:15:02+09:00;2023-02-23T23:33:35+09:00","default:vip","vip")
*[[練習問題]]の回答例 [#md82ea7f]

#ls2(,compact)

----
* フィボナッチ数列 課題3 [#fib3]
-再帰版の利点: フィボナッチ数列の定義を直接に表現でき、読み書きに優れる。(この性質はこの問題に限らず、難問でも自然に思いつきやすい。)
-再帰版の欠点: 素朴な実装では同じ値を何度も計算するため計算量が指数的増加 O(1.618^n) となり、大きいフィボナッチ数の算出は文字通り桁違いに遅くなる(これは問題依存。再帰が常に爆発的計算量というわけではない)。なのでメモ化しよう!~
:再帰版の利点|フィボナッチ数列の定義を直接に表現でき、読み書きに優れる。(この性質はこの問題に限らず、難問でも自然に思いつきやすい。)
:再帰版の欠点|素朴な実装では同じ値を何度も計算するため計算量が指数的増加 O(1.618^n) となり、大きいフィボナッチ数の算出は文字通り桁違いに遅くなる(これは問題依存。再帰が常に爆発的計算量というわけではない)。なのでメモ化しよう!~
また再帰が深くなるとコールスタックが溢れて関数呼び出し限界を迎えて異常停止する。関数呼び出し自体もオーバーヘッドがあり若干のコストだ。
-反復版: 途中結果を保持しながら順に計算するため計算量が線形 O(n) で高速。スタックオーバーフローの心配もない。ただし、数列の定義との対応は再帰版ほど直感的でない。
:反復版|途中結果を保持しながら順に計算するため計算量が線形 O(n) で高速。スタックオーバーフローの心配もない。ただし、数列の定義との対応は再帰版ほど直感的でない。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS