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

  

posted @ 2021-09-22 14:59  专职  阅读(133)  评论(0编辑  收藏  举报