[已解决]Golang 递归匿名函数遇到的问题

有这么一段代码,源码地址:github.com/adonovan/gopl.io/blob/m...

其他的代码都能理解,就是第 53 行和第 54 行,这两行代码之间的联系,没能理解。

visitAll 它是一个匿名函数,在这个匿名函数中,会递归它自己本身。我的疑惑是:第 53 行代码是递归它自己本身了,那么就会重新回到这个函数中的第一行代码,为什么代码还是能往下走,去执行第 54 行代码:order = append(order, item)

我通过 Goland 这个 IDE 的调试工具,一步一步调试下去,也没能理解:既然是调用函数了,那么就应该立即回到函数的第一行代码,而不会往下走才对。为什么代码还是会走向第 54 行?

如果说递归函数的最终回溯行为,但是这行 order = append(order, item) 代码是在匿名函数的 for 循环体内。

恳请各位大佬不吝指点,实在没能理解这个行为。

go
最佳答案

你对于递归的理解不对吧,递归调用自己,并不是结束自己,就和调用其他函数一样执行完成后还是会继续执行下面的程序

3年前 评论
root01 (楼主) 3年前
讨论数量: 3

你对于递归的理解不对吧,递归调用自己,并不是结束自己,就和调用其他函数一样执行完成后还是会继续执行下面的程序

3年前 评论
root01 (楼主) 3年前

高亮显示代码 https://github.com/adonovan/gopl.io/blob/master/ch5/toposort/main.go#L49-L57这样可以高亮出来代码所在的行

还有就是,匿名函数也是函数,没有 return break 或者出错 pinic ,go 中的函数都不会直接终止

3年前 评论

感谢两位大佬的提点,@wuyan、@caoayu 。自己没有转过弯来,现在理解了。就选最早解答的大佬作为答案了。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!