等价于转到C ++向量<int>?

Mat*_*ner 6 arrays containers vector go

我正在写一个返回可变长度数字序列的函数:

func fib(n int) ??? {
    retval := ???
    a, b := 0, 1
    for ; n > 0; n-- {
        ??? // append a onto retval here
        c := a + b
        a = b
        b = c
    }
}
Run Code Online (Sandbox Code Playgroud)

可以看出,返回序列的最终长度为nfib要实现惯用的Go ,应该如何以及应该返回什么?如果事先不知道长度,返回值和用法会有什么不同?如何将值插入retval

pet*_*rSO 7

在这里,我们知道有多少个数字;我们想要 n 个斐波那契数。

package main

import "fmt"

func fib(n int) (f []int) {
    if n < 0 {
        n = 0
    }
    f = make([]int, n)
    a, b := 0, 1
    for i := 0; i < len(f); i++ {
        f[i] = a
        a, b = b, a+b
    }
    return
}

func main() {
    f := fib(7)
    fmt.Println(len(f), f)
}
Run Code Online (Sandbox Code Playgroud)

输出:7 [0 1 1 2 3 5 8]


在这里,我们不知道有多少个数字;我们想要所有小于或等于 n 的斐波那契数。

package main

import "fmt"

func fibMax(n int) (f []int) {
    a, b := 0, 1
    for a <= n {
        f = append(f, a)
        a, b = b, a+b
    }
    return
}

func main() {
    f := fibMax(42)
    fmt.Println(len(f), f)
}
Run Code Online (Sandbox Code Playgroud)

输出:10 [0 1 1 2 3 5 8 13 21 34]


您还可以使用Go向量包中的IntVector。请注意。type IntVector []int

  • 您可以命名返回值并对其进行处理?!棒极了! (2认同)