Короче я сначала написал код
def makeFibo():
known = [1, 1]
def fibo(index):
if index < 0:
raise ValueError("index should be nonnegative")
old_len = len(known)
if index >= old_len:
known += [None] * (old_len - index + 1)
for i in range(old_len, index + 1):
# suboptimal but illustrative
known[i] = known[i - 1] + known[i - 2]
return known[index]
return fibo
fibo = makeFibo()
fibo(11)
и только по последовавшей ошибке
Цитата:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in fibo
UnboundLocalError: local variable 'known' referenced before assignment
вспомнил, что у питона плохо с замыканиями.
Тут надо переделать
makeFibo в класс (
known будет его полем и заполняться в конструкторе; плюс стоит переименовать её в
_known, чтобы показать приватность). В общем мне лень дальше вспоминать, кто-нибудь другой, может быть, продолжит это.
UPD: I stand corrected, смотрите про замыкания ссылочку ниже.