go - Go中使用递归和并发的第N个斐波那契数
问题描述
我试图翻译的 Java 代码。我一直在尝试实现这种在Go中获取第 n 个斐波那契数的 java 方法,但在崩溃之前我似乎无法让我的代码超过斐波那契数 35。这种方法应该是非常低效的,但不会低到无法完成。
package main
import (
"fmt"
"time"
)
type Fibonacci struct {
num float64
answer float64
}
func newFibonacci(n float64) *Fibonacci {
f := new(Fibonacci)
f.num = n
c1 := make(chan float64)
c2 := make(chan float64)
if f.num <= 1 {
f.answer = n
} else {
go func() {
fib1 := newFibonacci(n - 1)
c2 <- fib1.answer
}()
go func() {
fib2 := newFibonacci(n - 2)
c1 <- fib2.answer
}()
f.answer = <-c2 + <-c1
}
close(c1)
close(c2)
return f
}
func main() {
numbers := []float64{30, 35, 36, 37, 38, 39, 40}
for _, value := range numbers{
start := time.Now()
fmt.Println("getting the ", value, " fibonacci number")
f := newFibonacci(value)
fmt.Println(f.answer)
end := time.Now()
totalTime := end.Sub(start)
fmt.Println("Fibonacci number: ", value, " took ", totalTime, "\n")
}
}