登录
首页 >  Golang >  Go问答

解析 Go 中递归的工作原理

来源:stackoverflow

时间:2024-02-10 18:54:24 281浏览 收藏

你在学习Golang相关的知识吗?本文《解析 Go 中递归的工作原理》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在学习go,准备编码面试,有一道关于树遍历的leetcode问题。它适用于 python 中的递归,但 golang 的行为有所不同。

我注意到,当每个调用堆栈被弹出时,res 切片中的元素都会被一一清除。

原来的问题是

结果应该是[1,3,5,6,2,4],在python中正确返回,但是下面的go代码返回[]

/**
     * definition for a node.
     * type node struct {
     *     val int
     *     children []*node
     * }
     */
    
    func preorder(root *node) []int {
        res := []int{}
    
        traverse(root, res)
    
        return res
    }
    
    func traverse(root *node, res []int){
        if root == nil{
            return
        }
    
        res = append(res, root.val)
    
        for _, n := range root.children{
            traverse(n, res)
        }
        // the last element is removed from the slice every time when the code execution reaches here 
    }

------------------------------------更新--------- ------------------------------------------

感谢您的所有回答,现在我想我对 go 中的 slice 工作原理有了更好的理解

以下代码现在对我有用:

/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Children []*Node
 * }
 */

func preorder(root *Node) []int {
    res := []int{}

    res = traverse(root, res)

    return res
}

func traverse(root *Node, res []int) []int{
    if root == nil{
        return res
    }

    res = append(res, root.Val)

    for _, n := range root.Children{
        res = traverse(n, res)
    }

    return res
}

正确答案


您可以考虑将 res 作为指针 *[]int 传递,以便将值更新到同一切片,否则您只是传递它的副本。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>