Уважаемый автор, попробуйте вот этот вариант (Python 3.8) на вашем компьютере. Результат вас удивит.
import time
import sys
from functools import lru_cache
@lru_cache(5000000)
def calc(number: int) -> int:
if number == 1:
return 0
elif number % 2 == 0:
iterations = calc(number//2)+1
else:
iterations = calc(3*number+1)+1
return iterations
if __name__ == '__main__':
sys.setrecursionlimit(2000)
start = time.process_time()
max_num, num = 0, 0
for i in range(1, 1000000+1):
if (cur_num := calc(i)) > max_num:
max_num, num = cur_num, i
print('n =', num, 'iterations =', max_num+1, 'time =', time.process_time()-start, 'sec')
Если поменять декоратор на
@numba.njit()
то будет еще чуть быстрее.