0
我正在學習Golang,並且我試圖理解遞歸函數輸出背後的邏輯。算法:瞭解遞歸函數
這裏是我的程序:
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)
}
輸出:
Break 5
i = 4
i = 3
i = 2
i = 1
Value j = 1
我的問題是:
爲什麼第一輸出(突破500)在輸出的頂部?是不是我的功能中的最後一個輸出被打印?
爲什麼在主函數
j = rec(1)
返回1,並忽略條件的回報?
if i == 5{
fmt.Println("Break", i)
return i // Here normally the return will be: return 5 ??
}
PS:我使用Ubuntu 14.04下
謝謝您的回答轉到版本go1.2.1 LINUX/386。
@ nexus66因爲你的函數遞歸地返回5,然後4,然後3 ...等等。所以你的j變量等於5,然後它被覆蓋到4,然後3,...,直到它命中1,你打印的。 – ifma
謝謝!我掌握了邏輯。 –