2016-11-09 4 views
-1

Я создал простую рекурсивную факториальную функцию в Python. В настоящее время мой компьютер может вычислить факториалы примерно до 10000. Для значений, превышающих это, python.exe просто перестает работать.Обработка тяжелых сценариев Python

Итак, мой вопрос заключается в следующем: если я хочу обрабатывать более крупные факториалы, могу ли я это сделать (используя несколько ядер и т. Д.)? Или это просто предел Питона? Я проверил использование графического процессора для сценариев Python, но этот метод кажется сложным и сложным для того, что я имею в виду.

Я установил предел рекурсии на 100000, так что это не должно быть проблемой.

Это мой код:

import sys, time 
sys.setrecursionlimit(100000) 
def f(n): 
    if n==0: 
     return 1 
    else: 
     return n*f1(n-1) 

Спасибо за вашу помощь

+2

показать нам код – depperm

+1

* Я установил предел рекурсии на 10000000, так что это не должно быть проблемой *. За исключением того, что все эти рекурсивные кадры вызовов имеют память. Python не оптимизирует рекурсивные вызовы. –

+0

Зачем вам это делать? Если вы в настоящее время используете всю память с использованием нескольких ядер, ничего не измените – Hearner

ответ

0

Я думаю, что основной проблемой является стека вызовов, если вы не используете хвостовую рекурсию на ваш факторный, стек будет заполнить. Я думаю, что почта будет полезна для вас.

What is tail recursion?

def f_loop(n): 
    acum = 1 
    for i in range(2,n+1): 
     acum*=i 
    return acum 

Yo может осуществить это с functools.reduce.

+1

Насколько я знаю, Python не поддерживает хвостовую рекурсию. – PK123

+0

hmm ok, вы можете переключить функцию на нормальный цикл – mandrewcito

Смежные вопросы