我有一个递归函数。该函数将根据它获得的数据使用各种不同的值调用自身,因此递归的数量和深度是未知的:每次调用可能会调用自己零次或多次。该函数可以返回任意数量的值。
我想通过让 goroutines 和通道参与进来来并行化它。每次递归都inner在自己的 goroutine中运行,并在通道上发回一个值。外部函数处理这些值。
func outer(response []int) {
results := make([]int)
resultsChannel := make(chan int)
inner := func(...) {
resultsChannel <- «some result»;
// Recurse in a new goroutine.
for _, recursionArgument in «some calculated data» {
go inner(recursionArgument)
}
}
go inner(«initial values»);
for {
result := <- resultsChannel
results = append(results, result)
// HELP! How do I decide when to break?
}
return results
}
问题在于逃避结果通道循环。由于递归的“形状”(未知的数量和深度),我不能说“在n 个事件后完成”,也不能发送哨兵值。
如何检测所有递归何时发生并从 返回outer?有没有更好的方法来解决这个问题?
Helenr
相关分类