2017-03-03 1 views
-2

私は完全にPythonに新しく、階乗変数を返すことに問題があります。私は再帰関数を作成しようとしています。 12、9、7行目で、「割り当て前に参照されているローカル変数の階乗」という単語でエラーが発生し続けます。どんな助けもありがとうございます。Python:変数を返す

global userinput 
userinput = input('What integer would you like to to find a total factorial  for?') 
def recursion(counter): 
    if counter < 3: 
    factorial = 1 
    if counter <= userinput: 
    factorial = factorial * counter 
    increase = counter + 2 
    recursion(increase) 
    else: 
    return factorial 
efactorial = recursion(2) 
ofactorial = recursion(1) 
tfactorial = efactorial + ofactorial 
+0

この部分: 'factorial = factorial * counter'は' factorial'(右側)を参照していますが、まだ数値に設定されていません。 – James

+0

ところで、数学モジュールは階乗関数を持っています – abccd

答えて

1

recusion機能でcounterが3を超えている場合は、factorialは割り当てられません。したがって、2番目のifの式は、割り当て解除エラーを引き起こします。これを試してみてください:

def recursion(counter): 
    if counter < 3: 
     factorial = 1 
    else: 
     factorial = xx # Any value you want 
    ... 
+0

@Brantley、これが最良の答えです。 –

0

当面の問題

いくつか他の人がすでに入力引数は> = 3である場合は(値与えられた)あなたが定義されていないローカル変数を使用していることを指摘しています。その直後、あなたは再帰ステップを採用したが、その後の戻り値を無視:値を返しますが、あなたはどこにでもそれを維持するために失敗し

increase = counter + 2 
recursion(increase) 

再帰を。したがって、結果は完全に失われます。一般的に

TECHNIQUE

、あなたは単純な問題を解決するために再帰を使用して、あなたのソリューションでその単純な問題の結果を組み込みます。 あなたがを与えてくれたコードで、それはこのようなものになります。

factorial = counter * recursion(counter + 2) 
return factorial 

それとも単に

return counter * recursion(counter + 2) 

FUNCTIONAL PROBLEM

を私はあなたが奇数分ける理由はわかりませんし、偶数。結果は、数学者が「階乗」と呼ぶものではありません。

共通のアプローチ

実際階乗関数は、一般的なプログラミングの練習です。標準的なアルゴリズムは、希望する数字から始め、1に戻るようにすることです。これはあなたの質問を投稿する前にやっていたことです。明らかに、別の問題があり、コードの解決策が必要です。

関連する問題