golang中通过递归或通道实现斐波那契数列

1. 循环实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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. 递归实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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. 通道实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 @   专职  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示