以惯用方式返回向量的长度

发布于 2024-10-04 19:24:08 字数 366 浏览 3 评论 0原文

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

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

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

I'm writing a function that returns a sequence of numbers of variable length:

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

It can be observed that the final length of the returned sequence will be n. How and what should fib return to achieve idiomatic Go? If the length was not known in advance, how would the return value, and usage differ? How do I insert values into retval?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北渚 2024-10-11 19:24:08

在这里,我们知道有多少个数字;我们想要 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)
}

输出: 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)
}

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


您还可以使用 IntVector 来自 Go 向量包。请注意,类型为 IntVector []int

Here, we know how many numbers; we want n Fibonacci numbers.

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

Output: 7 [0 1 1 2 3 5 8]


Here, we don't know how many numbers; we want all the Fibonacci numbers less than or equal to 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)
}

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


You could also use IntVector from the Go vector package. Note that type IntVector []int.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文