2017-08-03 2 views
0

Ich brauche Hilfe bei einigen Hausaufgaben. Ich bin mit Python nicht so vertraut. Ich habe jedoch ein Problem mit diesem kleinen Python-Programm. Es verwendet die Rekursion, um einen Zahlensatz basierend auf der gegebenen Funktion auszudrucken. Es wird etwa num = 30 und das Programm stürzt ab. Nicht sicher, was falsch ist oder wie es zu beheben ist. Hilfe?Korrektur eines rekursiven Python-Programms, das nach der Verarbeitung abstürzt

def func(num): 
    if num==0: 
    return 0 
elif num==1: 
    return 1 
else: 
    return func(num-1)+2*func(num-2) 
for num in range(2,101): 
print(num,func(num)) 
+0

Wahrscheinlich ein 'StackOverflowError'? Jeder Funktionsaufruf muss einen neuen Stapel zuweisen, sodass Sie wahrscheinlich bei jedem Aufruf eine Menge Ressourcen verwenden. – Zizouz212

Antwort

1

Es stürzt nicht ab, aber die Anzahl der Rekursion wird groß und es dauert zu lange, zu berechnen, Sie memoization verwenden können Dinge in Rekursion zu beschleunigen, indem ein Wörterbuch Übergabe der Werte zu speichern, die bereits berechnet wurden und dann können Sie es einfach aus dem Wörterbuch abrufen, anstatt es erneut zu berechnen. Sie brauchen auch nicht elif/else zu verwenden, wenn, wenn Sie einen Wert in Ihrem if-statement, zum Beispiel der Rückkehr:

def func(num, m): 
    if num == 0: 
     return 0 
    if num == 1: 
     return 1 
    if num not in m: 
     m[num] = func(num-1, m)+2*func(num-2, m) 
    return m[num] 

m = {} 
for num in range(2,101):  
    print(num,func(num, m)) 
+1

Kannst du 'functools.lru_cache' nicht benutzen? – Zizouz212

+0

@ Zizouz212 OP nicht erwähnt Python-Version, 'functools.lru_cache' ist nicht verfügbar in Python 2 afaik –

+0

Ich dachte nur wegen der' print' -Funktion. Aber du hast recht, es ist nur in Python 3. – Zizouz212

Verwandte Themen