Pointers 在没有通道的情况下并发计算斐波那契,但指针不起作用

Pointers 在没有通道的情况下并发计算斐波那契,但指针不起作用,pointers,go,concurrency,fibonacci,goroutine,Pointers,Go,Concurrency,Fibonacci,Goroutine,在本练习中,我试图计算斐波那契数,但通过生成goroutines并通过参数中的指针返回结果,但我做错了什么,请帮助 主程序包 进口( “fmt” ) func fib(n int,p*int){ fmt.Println(n) 变量a,b int 如果n>1{ go fib(n-1和a) go fib(n-2和b) *p=a+b }否则{ *p=n } 格式打印项次(*p) } func main(){ c:=-1 去腓骨(5,&c) fmt.Println(c) } 谢谢@poWar下面是我发布

在本练习中,我试图计算斐波那契数,但通过生成goroutines并通过参数中的指针返回结果,但我做错了什么,请帮助

主程序包
进口(
“fmt”
)
func fib(n int,p*int){
fmt.Println(n)
变量a,b int
如果n>1{
go fib(n-1和a)
go fib(n-2和b)
*p=a+b
}否则{
*p=n
}
格式打印项次(*p)
}
func main(){
c:=-1
去腓骨(5,&c)
fmt.Println(c)
}

谢谢@poWar下面是我发布的解决方案,只是为了不让问题悬而未决(可能不是最好的,但可以完成练习)

主程序包
进口(
“fmt”
“同步”
)
func fib(n int,p*int,wg1*sync.WaitGroup){
//fmt.Println(n)
a、 b:=-1,-1
var wg sync.WaitGroup
如果n>1{
工作组.添加(1)
go fib(n-1、a和wg)
工作组.添加(1)
go fib(n-2、b和wg)
wg.Wait()
*p=a+b
}否则{
*p=n
}
wg1.完成()
//格式打印项次(*p)
}
func main(){
c:=-1
var wg sync.WaitGroup
工作组.添加(1)
go fib(30、c和wg)
wg.Wait()
fmt.Println(c)
}

该程序存在数据竞争。运行以查看位置。fib计算是顺序计算。为此使用go例程并不理想,而且是多余的。但是,您的代码存在数据竞争。多个go例程可以读取和写入
p
。另外,当您正在生成围棋例程时,您希望在退出main之前等待它们全部完成。一种方法是通过waitgroup。参考