Скажите, что я хочу сгенерировать следующую рекурсивную последовательность:
![enter image description here](https://i.stack.imgur.com/gtrbi.png)
, которая является такой же последовательностью, что и следующая в закрытой форме:
![enter image description here](https://i.stack.imgur.com/baxh9.png)
Но цель состоит в том, чтобы написать функцию для генерации последовательности с ее рекурсивным определением. Итак, моя функция заключается в следующем:
def gen_seq(n):
'''
n is the number of terms to generate in the sequence
'''
lis = [1] # starting number of the sequence
for i in range(1,n):
lis.append(lis[-1] + 2*(i+1) - 1)
return lis
Мы можем взглянуть на первые 10 членов последовательности:
gen_seq(10)
>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Если мы посмотрим на время, необходимое для генерации первых 10 миллион чисел в последовательности:
import time
t = time.time()
foo = gen_seq(10000000)
print('Time taken: {}s'.format(time.time()-t))
>>> Time taken: 6.146637201309204s
Это займет 6,1 секунды. Для 100 миллионов номеров потребуется 1 минута. С более сложными последовательностями время будет больше.
Как мне оптимизировать эту функцию, чтобы сделать ее намного быстрее?