Ваше замедление лежит в строке
next_element , start , k = next_element + str(k) + start , x , 1
, что приводит к большим потерям времени выполнения, когда next_element - очень длинная строка (что, безусловно, имеет место при увеличении n - next_element длиной более 500 000 символов для n = 48). Попробуйте запустить следующие два сценария:
import time
a = time.time()
s = ''
for i in range(99999):
s = (s + '1') + '1' # comment this out
# s += '1' + '1' # and uncomment this to see the speed difference
b = time.time()
print(b-a)
вы заметите, что использование строки с использованием + = выполняется значительно быстрее. Python вычисляет слева направо, то есть (s + '1')
должен вычислить новую строку перед добавлением + '1'
. Это то, что добавляет так много замедления.
Между прочим, если вы измените эту проблемную строку на
next_element += str(k) + start
start = x
k = 1
, вы действительно увидите, что ваш главный алгоритм работает быстрее