Вместо того, чтобы управлять двумя переменными (a, b) и суммировать их, используйте сам результирующий список и суммируйте последние N элементов, чтобы добавить каждый новый:
def fibo(N,M):
result = [1]
for i in range(M-1):
result.append(sum(result[-N:]))
return result
Вы можете обобщить это еще большеприняв функцию или лямбду, которая вычисляет следующее значение на основе ряда на данный момент:
def series(N,getNext,init=[1]):
result = init
for i in range(N-len(init)):
result.append(getNext(result))
return result
series(10,lambda r:sum(r[-2:])) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
series(10,lambda r:sum(r[-2:]),init=[5,-3]) # [5, -3, 2, -1, 1, 0, 1, 1, 2, 3]
series(10,lambda r:sum(r[-3:])) # [1, 1, 2, 4, 7, 13, 24, 44, 81, 149]
series(10,lambda r:r[-1]*2) # [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
series(10,lambda r:r[-2]-r[-1],init=[-1,1]) # [-1, 1, -2, 3, -5, 8, -13, 21, -34, 55]