fibonacci without functools (to work in pypy)

This commit is contained in:
Stefan Harmuth 2021-12-12 15:28:33 +01:00
parent d8bb8d8aba
commit 904caf85ae

View File

@ -1,5 +1,5 @@
import math import math
from functools import cache from typing import Dict
def factorial(n: int) -> int: def factorial(n: int) -> int:
@ -10,8 +10,7 @@ def factorial(n: int) -> int:
return math.factorial(n) return math.factorial(n)
@cache def fibonacci(n: int, cache: Dict[int, int] = None) -> int:
def fibonacci(n: int) -> int:
""" """
F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1 F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1
0, 1, 1, 2, 3, 5, 8, 13, 21, ... 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
@ -19,7 +18,13 @@ def fibonacci(n: int) -> int:
if n < 2: if n < 2:
return n return n
return fibonacci(n - 1) + fibonacci(n - 2) if cache is None:
cache = {}
if n not in cache:
cache[n] = fibonacci(n - 1, cache) + fibonacci(n - 2, cache)
return cache[n]
def triangular(n: int) -> int: def triangular(n: int) -> int: