【发布时间】:2018-10-01 02:21:59
【问题描述】:
我是 Go 新手,来自 Node.JS。
在 Node 中,如果我运行这个:
function run(tick = 0) {
if (tick < 1000000) {
return run(tick + 1);
}
return 0;
}
console.log(run());
程序将因为超出最大调用堆栈大小而崩溃。
如果我在 Go 中这样做:
package main
import "fmt"
func run(tick int) (int) {
if (tick < 1000000) {
return run(tick + 1)
}
return 0
}
func main() {
fmt.Println(run(0))
}
这将运行并将0 打印到标准输出。
我的问题是:
- 是否有超过我给出的 Go 示例会失败的最大调用次数?
- 这样的代码是 Go 中的反模式吗?
【问题讨论】:
-
这样的代码是 Go 中的反模式吗? 递归是反模式吗?
-
@TimCooper:当深度未知且堆栈大小有限时。 OP 举了一个这样的例子。
标签: node.js recursion go callstack