2016-11-09 14 views
-1

私はPythonで単純な再帰階乗関数を作成しました。現在、私のコンピュータは階乗を10000まで計算することができます。それよりも高い値の場合、python.exeは動作を停止します。重いPythonスクリプトの扱い

これは私が大きな階乗を処理したいのであれば、私はこれを行うことができる方法は何か(複数のコアを使用するなど)ですか?それともPythonの限界ですか?私はPythonスクリプトのためにGPUを使ってチェックアウトしましたが、この方法は複雑で複雑なものになります。

再帰の制限を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 

ヨfunctools.reduceでそれを実装することができます。

+1

私が知る限り、Pythonは末尾再帰をサポートしていません。 – PK123

+0

ええ、あなたは正常なループに機能を切り替えることができます – mandrewcito

関連する問題