1 回答
TA贡献1836条经验 获得超3个赞
其中包括:编译器在每个函数调用处插入潜在的切换点,因此每个递归调用都fib(...)可以让给“微调器”goroutine。
如果您尝试在没有任何函数调用的情况下实现 fib,例如:
// note : this is a truly horrific way to compute the Fibonacci sequence,
// don't do this at home
// simulate the "compute Fibonacci recursively" algorithm,
// but without any function call
func fib(n int) int {
var res = 0
var stack []int
stack = append(stack, n)
for len(stack) > 0 {
// pop :
n = stack[len(stack)-1]
stack = stack[0 : len(stack)-1]
if n < 2 {
res += n
continue
}
// else : push 'n-1' and 'n-2' on the stack
stack = append(stack, n-1, n-2)
}
return res
}
https://play.golang.org/p/pdoAaBwyscr
你应该看到你的微调器'卡住'
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报