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