代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

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

  •  4
  • Matt Joiner  · 技术社区  · 14 年前

    我在写一个函数,它返回一系列可变长度的数字:

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

    可以看到,返回序列的最终长度将是 n . 如何以及应该怎样 fib 回归实现成语围棋?如果事先不知道长度,返回值和用法会有什么不同?如何将值插入 retval ?

    2 回复  |  直到 14 年前
        1
  •  4
  •   peterSO    14 年前

    这里,我们知道有多少个数;我们需要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的Fibonacci数。

    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 从头到尾 vector package . 请注意 type IntVector []int .

        2
  •  0
  •   uriel    14 年前
    推荐文章