DA:dp

提供:classwiki
2025年3月30日 (日) 12:53時点におけるKkamma (トーク | 投稿記録)による版 (ページの作成:「= フィボナッチ数列 = 次のコードは,再帰関数を用いた全探索による解法です.ただし,fibonacci 関数の引数 n は正の整数であることを仮定しています. def fibonacci(n): if n == 1 or n == 2: return 1 return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(10)) しかしこれは無駄が多い実装です.fobonacci(n) を実行する際に,fibonacci(n-1) と fibonacci(n-2) が実行さ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

フィボナッチ数列

次のコードは,再帰関数を用いた全探索による解法です.ただし,fibonacci 関数の引数 n は正の整数であることを仮定しています.

def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))

しかしこれは無駄が多い実装です.fobonacci(n) を実行する際に,fibonacci(n-1) と fibonacci(n-2) が実行されますが,fibonacci(n-1) の中でも fibonacci(n-2) がまた実行されることになります.よって,このままでは全く同じ計算を何回も繰り返すことになります.

これを,既に計算したものは結果を保存して使い回す,という戦略で計算してみましょう.ここでは,n=10ならば,長さ10の配列を準備して,その k 番目の要素に fibonacci(k+1) が格納されるようにします.