Ich lerne Golang und ich versuche, die Logik hinter der Ausgabe einer rekursiven Funktion zu verstehen.Algorithmus: Grundlegende rekursive Funktion
Hier ist mein Programm:
package main
import(
"fmt"
)
func rec(i int) (int){
if i == 5{
fmt.Println("Break", i)
return i
}
rec(i+1)
fmt.Println("i = ", i)
return i
}
func main(){
j := 0
j = rec(1)
fmt.Println("Value j = ", j)
}
Der Ausgang:
Break 5
i = 4
i = 3
i = 2
i = 1
Value j = 1
Meine Fragen sind:
Warum der erste Ausgang (5 Pause) in der Spitze der Ausgänge ist? Wird nicht die letzte Ausgabe in meiner Funktion gedruckt?
Und warum in der Hauptfunktion
j = rec(1)
Rückkehr 1 und die Rückkehr der Bedingung ignorieren?
if i == 5{
fmt.Println("Break", i)
return i // Here normally the return will be: return 5 ??
}
PS: Ich bin mit Go Version go1.2.1 linux/386 unter Ubuntu 14.04
Vielen Dank für Ihre Antworten.
@ nexus66 Weil Ihre Funktion rekursiv 5, dann 4, dann 3 ... usw. zurückgibt. Also war Ihre j-Variable zuerst gleich 5, dann wird sie auf 4, dann 3, ... überschrieben, bis sie trifft 1, die du druckst. – ifma
Danke! Ich habe die Logik dahinter. –