2017-03-03 12 views
-2

Ich bin völlig neu in Python, und ich habe Probleme mit der faktoriellen Variable. Ich versuche eine rekursive Funktion zu erstellen. Ich bekomme immer wieder Fehler in den Zeilen 12, 9 und 7 mit den Worten "lokale Variable faktoriell", die vor der Zuweisung referenziert werden. Jede Hilfe wird geschätzt.Python: eine Variable zurückgeben

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

Dieser Teil: 'factorial = factorial * counter' verweist auf" factorial "(auf der rechten Seite), wurde aber noch nicht auf eine Zahl gesetzt. – James

+0

Übrigens, Mathematik-Modul hat eine Fakultät Funktion – abccd

Antwort

1

Wenn die counter in der recusion Funktion über 3 ist, dann ist die factorial nicht zugeordnet werden. Daher wird der Ausdruck in der zweiten if einen Entlastungsfehler auslösen. Versuchen Sie folgendes:

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

@Brantley, das ist die beste Antwort. –

0

unmittelbares Problem

Mehrere andere bereits darauf hingewiesen, dass Sie eine lokale Variable verwenden, die Sie nicht (da ein Wert) definiert, wenn das Eingabeargument ist> = 3. unmittelbar danach, beschäftigen Sie die Rekursion Schritt, aber dann den Rückgabewert ignorieren:

increase = counter + 2 
recursion(increase) 

Rekursion einen Wert zurückgibt, aber sie scheitern, es überall zu halten. Somit verlieren Sie das Ergebnis vollständig.

TECHNIQUE

In der Regel verwenden Sie die Rekursion ein einfacheres Problem zu lösen, und dann das Ergebnis dieses einfacheren Problems in Ihrer Lösung zu integrieren. Mit dem Code, den Sie gegeben haben, könnte es etwa so aussehen:

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

Oder einfach

return counter * recursion(counter + 2) 

funktionelles Problem

Ich habe keine Ahnung, warum Sie ungerade trennen und gerade Zahlen. Das Ergebnis, das Sie erhalten, ist nicht das, was Mathematiker faktoriell nennen.

COMMON APPROACH

Die tatsächliche faktorielle Funktion ist eine gemeinsame Programmier Übung. Der kanonische Algorithmus soll mit der gewünschten Zahl beginnen und rückwärts bis 1 arbeiten. Dies ist in der Forschung, die Sie tun sollten, bevor Sie Ihre Frage gepostet haben; offensichtlich haben Sie ein anderes Problem, und Sie benötigen eine Lösung für Ihren Code.

Verwandte Themen