fib を作り、メモ化のデコレータを付けて、フィボナッチ数列の fib(10) の値 55 を表示しよう。@lru_cache を付けると、関数の結果を覚えておき、同じ引数で呼ばれたら計算せずにすぐ返します。これを「メモ化」といいます。from functools import lru_cache
@lru_cache(maxsize=None)
def slow_double(n):
print(f'{n} を計算中...')
return n * 2
print(slow_double(5))
print(slow_double(5))5 を計算中... 10 10 と出ます。2回目は「計算中」が出ません。覚えていた答えをそのまま返したからです。fib(n)… フィボナッチ数列の n 番目を再帰で計算して返すn が1以下のときは n をそのまま返す(終わりの条件)fib の真上にメモ化のデコレータを付ける(付けないと同じ計算を何千回もくり返す)fib(n) を何千回も計算しますが、@lru_cache があれば一度計算した値を使い回します。重いAPI呼び出しの結果を再利用する、といった用途でも役立ちます。fib(n) = fib(n-1) + fib(n-2) が数列のルールn <= 1 のときはそのまま n を返す(終わりの条件)55
全問正解でクエストクリア!
問題 1: @lru_cache で fib(0)〜fib(5) をリストで表示しよう!
問題 2: @lru_cache で factorial(5) を計算して表示しよう!
問題 3: @lru_cache で fib(20) を表示しよう!