2016-06-23 14 views
0

Ich habe ein Problem, das das Ergebnis einer rekursiven Funktion mit Python zurückgibt.Kann eine Liste von einer rekursiven Funktion nicht zurückgeben

Meine Funktion muss eine Liste von Paaren möglicher Vergleiche zwischen Ganzzahlen in einem Bereich von maximal list_upper_range zurückgeben.

Es ist wichtig, dass zwei Eingänge nur einmal pro Paar gepaart werden.

Die Funktion verhält sich wie erwartet, bis ich das Ergebnis drucke, nachdem das Ergebnis an die Stelle zurückgegeben wurde, an der die Funktion aufgerufen wurde.

def generate_comparisons_list(list_upper_range, iter_start, list_of_cases): 
    if iter_start == list_upper_range: 
     #print(list_of_cases) here verified condition was met 
     return list_of_cases 

    for i in range(iter_start+1, list_upper_range): 
     this_case = [iter_start, i] 
     list_of_cases.append(this_case) 

    iter_start += 1 
    generate_comparisons_list(list_upper_range, iter_start, list_of_cases) 

list_of_cases_a_and_b = generate_comparisons_list(list_upper_range=6, iter_start=1, list_of_cases=[]) 

print(list_of_cases_a_and_b) #returns None 

Ergebnis sollte als

[[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]] 

zurückgegeben werden Habe ich falsch verstanden, wie Python-Listen in rekursiven Funktionen behandelt?

Antwort

3

Python Funktionen nicht automatisch die letzte Anweisung zurückkehren (die Art und Weise Rubin der Fall ist), haben Sie eine

return generate_comparisons_list(list_upper_range, iter_start, list_of_cases)

am Ende Ihrer Funktion zu tun.

Schauen Sie sich here an, um zu sehen, wie es funktioniert.

+0

Dies funktionierte Legende! Aber es wird meine Marke noch nicht richtig stimmen. Danke – JasTonAChair

+0

Dies ist eine Art außerhalb des Bereichs Ihrer Frage, aber hier ist auch eine bessere Möglichkeit, was Sie mit itertools erzeugen möchten. '[x für x in itertools.product (Bereich (1,6), Bereich (1,6)) wenn x [0] James

+0

Ja, das ist viel schöner – JasTonAChair

1

Ihre Funktion generate_comparisons_list() soll eine Liste zurückgeben, aber im rekursiven Aufruf wird der Rückgabewert verworfen. Sie müssen das Ergebnis zurückgeben

return generate_comparisons_list(list_upper_range, iter_start, list_of_cases) 
Verwandte Themen