2016-12-03 1 views
-1

Hier ist meine aktuelle Funktion:Python3 - Funktion, die unter Verwendung von Rekursion ein Argument und gibt Liste akzeptiert nur

def fn_one(x): 
    _list1 = [3, 1, 5, 3, 8, 5] 

    if 5 < x < 14: 
     return (fn_one(x-3) * fn_one(x-2)) + fn_one(x-1) 

    else: 
     if x < 6: 
      return _list1[x] 

print(fn_one(7)) 

Gerade jetzt nur meine Funktion einen int zurückgibt, was ich tun möchte, ist, eine Liste zurück, die die enthält Rückgabewert von 0 bis zum int. Beispiel: Angenommen, ich rufe die Funktion auf, indem ich "print (fn_one (4))" eintippe, und dann eine Liste mit [fn_one (0), fn_one (1), fn_one (2), fn_one (3), fn_one) zurückgeben (4)] von NUR mit Rekursion. Nein für Schleifen oder ähnliches, und die Funktion muss nur eine Variable nehmen.

+0

Warum das 'if' im' else' Zweig? –

+0

Warum auch die Obergrenze von 13? Was passiert, wenn Sie 'fn_one (14)' aufrufen? –

+0

Ich verstehe den oberen Teil der Funktion nicht. Wie verhält es sich mit Ihrem Beispiel? Was soll 'fn_one (x-3) * fn_one (x-2)' tun, wenn 'fn_one' eine Liste zurückgibt? –

Antwort

0

Es sieht aus wie Sie eine Funktion f so dass f(k) kehrt die k te Glied einer Folge haben, und Sie wollen eine Funktion g so dass g(k) kehrt [f(0), ..., f(k)] erstellen.

Grundsätzlich, in jedem Fall erst berechnen g(k-1) und dann das neueste Ergebnis anhängen.

def fn_two(x): 
    _list1 = [3, 1, 5, 3, 8, 5] 

    if 5 < x < 14: 
     lst = fn_two(x-1) 
     lst.append((lst[x-3] * lst[x-2]) + lst[x-1]) 
     return lst 
    else: 
     if x < 6: 
      # Return the first x values of _list1 
      return _list1[:x+1] 
+0

Das ist, was ich gesucht habe! Vielen Dank –

0

Sie haben bereits die ersten sechs Zahlen in _list1, also wenn x < 6, können Sie einfach zurückgeben einen Teil oder alle dieser Liste, wie mit:

if x <= 5: 
    return _list1[:x + 2] 

Andernfalls Sie auf _list1 hinzufügen möchten und zurück, dass:

else: 
    # returns the list formed by everything below element x 
    out_list = fn_one(x - 1) 
    # returns using values from the newly generated list 
    return out_list + [(out_list[-3] * out_list[-2]) + out_list[-1]] 

, um es zusammen:

def fn_one(x): 
    _list1 = [3, 1, 5, 3, 8, 5] 

    if x <= 5: 
     return _list1[:x + 2] 
    else: 
     # returns the list formed by everything below element x 
     out_list = fn_one(x - 1) 
     # returns using values from the newly generated list 
     return out_list + [(out_list[-3] * out_list[-2]) + out_list[-1]] 
+0

Vielen Dank für Ihre Zeit und Mühe das hilft mir zu verstehen :) –

Verwandte Themen