在没有通道的情况下同时计算斐波那契数列,但指针不起作用
calculating fibonacci concurrently without channels, but pointers are not working
在这个练习中,我试图计算斐波那契数,但是通过生成 goroutines 并通过参数中的指针发回结果,但我做错了什么请帮助
package main
import (
"fmt"
)
func fib(n int, p *int) {
fmt.Println(n)
var a, b int
if n > 1 {
go fib(n-1, &a)
go fib(n-2, &b)
*p = a + b
} else {
*p = n
}
fmt.Println(*p)
}
func main() {
c := -1
go fib(5, &c)
fmt.Println(c)
}
谢谢@poWar,下面是我发布的解决方案,只是为了不让问题悬而未决(可能不是最好的,但完成了练习)
package main
import (
"fmt"
"sync"
)
func fib(n int, p *int, wg1 *sync.WaitGroup) {
// fmt.Println(n)
a, b := -1, -1
var wg sync.WaitGroup
if n > 1 {
wg.Add(1)
go fib(n-1, &a, &wg)
wg.Add(1)
go fib(n-2, &b, &wg)
wg.Wait()
*p = a + b
} else {
*p = n
}
wg1.Done()
// fmt.Println(*p)
}
func main() {
c := -1
var wg sync.WaitGroup
wg.Add(1)
go fib(30, &c, &wg)
wg.Wait()
fmt.Println(c)
}
在这个练习中,我试图计算斐波那契数,但是通过生成 goroutines 并通过参数中的指针发回结果,但我做错了什么请帮助
package main
import (
"fmt"
)
func fib(n int, p *int) {
fmt.Println(n)
var a, b int
if n > 1 {
go fib(n-1, &a)
go fib(n-2, &b)
*p = a + b
} else {
*p = n
}
fmt.Println(*p)
}
func main() {
c := -1
go fib(5, &c)
fmt.Println(c)
}
谢谢@poWar,下面是我发布的解决方案,只是为了不让问题悬而未决(可能不是最好的,但完成了练习)
package main
import (
"fmt"
"sync"
)
func fib(n int, p *int, wg1 *sync.WaitGroup) {
// fmt.Println(n)
a, b := -1, -1
var wg sync.WaitGroup
if n > 1 {
wg.Add(1)
go fib(n-1, &a, &wg)
wg.Add(1)
go fib(n-2, &b, &wg)
wg.Wait()
*p = a + b
} else {
*p = n
}
wg1.Done()
// fmt.Println(*p)
}
func main() {
c := -1
var wg sync.WaitGroup
wg.Add(1)
go fib(30, &c, &wg)
wg.Wait()
fmt.Println(c)
}