我正在学习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
我的问题是:
为什么第一个输出(中断5)位于输出的顶部?是不是我的函数中的最后一个输出要打印?
为什么在主要功能
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下使用Go版本go1.2.1 linux / 386
感谢您的回答。
答案 0 :(得分:3)
func rec(i int)
函数
rec(i+1) // recurse at the i+1 value
fmt.Println("i = ", i)
递归迭代i直到它达到5,之后你的if条件触发,这就是为什么5首先打印,然后它连续向下通过调用堆栈,打印4,然后3,......等等。
这是一个问题r.e.递归,而不是具体去。有许多资源可以帮助您理解,这里是Towers of Hanoi problem中递归的解释。