算法:了解递归函数

时间:2016-07-09 14:00:41

标签: algorithm recursion go

我正在学习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

感谢您的回答。

1 个答案:

答案 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中递归的解释。