golang中通过递归或通道实现斐波那契数列
1. 循环实现
package main
import "fmt"
func fibonacciFor(nums int) (s1 []int) {
// 循环实现斐波那切数列
num1, num2 := 0, 1
s1 = []int{num1, num2}
for i := 2; i < nums; i++ {
num1, num2 = num2, num1 + num2
s1 = append(s1, num2)
}
return
}
func main() {
// 循环实现斐波那切数列
s1 := fibonacciFor(10)
fmt.Println(s1)
}
2. 递归实现
package main
import "fmt"
func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n - 2) + fibonacci(n - 1)
}
func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Println(fibonacci(i))
}
}
3. 通道实现
package main
import (
"fmt"
"time"
)
func fibonacci(n int, c chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x + y
time.Sleep(100 * time.Millisecond)
}
close(c) // 关闭通道
}
func main() {
c := make(chan int, 10)
go fibonacci(cap(c), c)
// 从通道中获取数据,由于发送完10个数据后通道关闭了,所有range从通道中取完10个数据后自动结束
for i := range c {
fmt.Println(i)
}
}

浙公网安备 33010602011771号