вычисление фибоначчи одновременно без каналов, но указатели не работают - PullRequest
0 голосов
/ 12 июля 2020

в этом упражнении я пытаюсь вычислить числа Фибоначчи, но путем создания горутин и отправки результата по указателю в аргументе, но я делаю что-то не так, пожалуйста, помогите

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

1 Ответ

0 голосов
/ 12 июля 2020

Спасибо @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)
}
...