Zadanie
W przypadku tego wyzwania należy ulepszyć istniejący program, dzięki czemu działa szybciej. Spróbuj pisać programy samodzielnie, nawet jeśli musisz wrócić i sprawdzić przykłady, które zostały użyte do praktyki. Następnie porównaj swoje rozwiązanie z tym, który mamy w następnej lekcji.
Współbieżność w języku Go to złożony problem, który lepiej zrozumiesz podczas praktyki. To wyzwanie to tylko jedna idea tego, co można zrobić, aby ćwiczyć.
Powodzenia!
Szybsze obliczanie liczb Fibonacciego przy użyciu współbieżności
Użyj następującego programu, aby obliczyć liczby Fibonacciego w sekwencyjny sposób:
package main
import (
"fmt"
"math/rand"
"time"
)
func fib(number float64) float64 {
x, y := 1.0, 1.0
for i := 0; i < int(number); i++ {
x, y = y, x+y
}
r := rand.Intn(3)
time.Sleep(time.Duration(r) * time.Second)
return x
}
func main() {
start := time.Now()
for i := 1; i < 15; i++ {
n := fib(float64(i))
fmt.Printf("Fib(%v): %v\n", i, n)
}
elapsed := time.Since(start)
fmt.Printf("Done! It took %v seconds!\n", elapsed.Seconds())
}
Musisz skompilować dwa programy z tego istniejącego kodu:
Ulepszona wersja, w której implementujesz współbieżność. Zakończenie powinno potrwać kilka sekund (nie więcej niż 15 sekund), tak jak teraz. Należy użyć buforowanych kanałów.
Napisz nową wersję, która oblicza liczby Fibonacciego, dopóki użytkownik nie
quit
wejdzie do terminalufmt.Scanf()
przy użyciu funkcji . Jeśli użytkownik naciśnie Enter, należy obliczyć nową liczbę Fibonacciego. Innymi słowy, nie będziesz już mieć pętli z zakresu od 1 do 10.Użyj dwóch niebuforowanych kanałów: jeden, aby obliczyć liczbę Fibonacciego, a drugą oczekującą na komunikat "quit" od użytkownika. Należy użyć instrukcji
select
.
Oto przykład interakcji z programem:
1
1
2
3
5
8
13
quit
Done calculating Fibonacci!
Done! It took 12.043196415 seconds!