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
谢谢!我掌握了逻辑。 –