تکنیک memoization :
ما از این تکنیک برای سرعت بخشیدن به محاسبات مثل محاسبه مقدار فیبوناچی به روش بازگشتی استفاده میکنیم.
اساس کار memoization ذخیره کردن مقدار محاسبه شده در مرحله ی قبل هست. به این صورت که مثلا در همین محاسبه مقدار فیبوناچی ، مقداری رو 2 بار محاسبه نکنیم بلکه بعد از یک بار محاسبه کردن، ذخیرش کنیم و در اعداد بعدی که باز نیاز هست محاسبه بشه فقط از مقدار ذخیره شده استفاده کنیم:
cache = {}
def fib(n):
if n in cache:
return cache[n]
if n == 1:
result = 1
elif n == 2:
result = 1
elif n > 2:
result = fib(n - 1) + fib(n - 2)
cache[n] = result
return result
برای دیدن تاثیرش میتونین عددی بیشتر از 35 رو یک بار با استفاده از memoization یک بار بدون اون به این تابع بدین.
پایتون هم برای راحتی ما یک decorator ای رو پیاده سازی کرده به اسم lru_cache و میتونیم این رو برای فانکشن های خودمون استفاده کنیم :
from functools import lru_cache
@raspberry_python