登录
首页 >  Golang >  Go问答

使用 Golang 的内部函数进行递归

来源:stackoverflow

时间:2024-03-08 17:57:26 321浏览 收藏

golang学习网今天将给大家带来《使用 Golang 的内部函数进行递归》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

递归内部函数声明 golang

它应该很丑吗?

我目前正在尝试为 leetcode 问题编写递归 dfs(golang 新手)

不运行:

当我尝试像这样创建和声明我的内部函数时:

outerfunction (node *treenode, target int) bool {
  checksolutions := func(node *treenode, total int) bool {
        // ... dfs algo
        checksolutions(node.left)
        checksolutions(node.right)
    }
    
  return checksolution(root, 0)
}

我在递归调用期间无法访问内部函数并收到错误!但是,当我首先将函数声明为变量(如下)时,它会运行

运行:
outerFunction (node *TreeNode, target int) bool {
  var checkSolution func(*TreeNode, int) bool
  checkSolutions = func(node *TreeNode, total int) bool {
        // ... DFS algo
        checkSolutions(node.Left)
        checkSolutions(node.Right)
    }
    
  return checkSolution(root, 0)
}

这是在 go 中声明递归内部函数的最简洁的方法吗?由于某种原因,它对我来说有点冗长,所以我只是想发表这篇文章,看看是否有任何 golang 语法糖适用于我所缺少的这种情况。


正确答案


总而言之,这是你能得到的最好的。这里没有比这更好的了。

在 firat 情况下,您可以清楚地看到函数 checksolutions 没有被声明。因此,当您在声明中使用它时,go 编译器不知道该函数是什么以及它应该做什么(参数和返回)。

outerFunction (node *TreeNode, target int) bool {
  checkSolutions := func(node *TreeNode, total int) bool {
        // ... DFS algo
        checkSolutions(node.Left)    // Is not decleared yet to be used
        checkSolutions(node.Right)
    }
    
  return checkSolution(root, 0)
}

在其他情况下,当您定义了它应该执行的操作时,编译器可以理解这些定义并相应地继续进行。

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

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