登录
首页 >  Golang >  Go问答

在没有通信渠道的情况下无法同时计算斐波那契数列,但不能使用指针

来源:stackoverflow

时间:2024-02-20 21:36:15 194浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《在没有通信渠道的情况下无法同时计算斐波那契数列,但不能使用指针》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

在这个练习中,我试图计算斐波那契数,但通过生成 goroutine 并通过参数中的指针发送回结果,但我做错了,请帮忙

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)
}

理论要掌握,实操不能落!以上关于《在没有通信渠道的情况下无法同时计算斐波那契数列,但不能使用指针》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>