2010-11-25 2 views
4

가변 길이의 숫자의 시퀀스를 반환하는 함수를 작성 중입니다.동등한 C++ 벡터 <int>로 이동?

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이됩니다. 관용적 인 Go를 얻기 위해 fib이 어떻게 리턴해야합니까? 길이가 미리 알려지지 않았다면 반환 값과 사용법은 어떻게 다릅니 까? 값을 retval에 어떻게 삽입합니까?

답변

3

여기에 몇 개의 숫자가 있는지 알고 있습니다. 우리는 피보나치 수를 원한다.

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

출력 : [0 1 1 2 3 5 8 여기서


, 우리는 얼마나 많은 숫자를 모르는 7; 우리는 모든 피보나치 수를 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 2 3 5 8 13 21 34]


또한 이동 vector package에서 IntVector을 사용할 수있다. type IntVector []int에 유의하십시오.

+2

반환 값의 이름을 지정하고 처리 할 수 ​​있습니까?! 멋지다! –

+0

당신의 대답은 커뮤니티 위키입니다, 당신이 잘받을 가치가있는 점을 얻지 못했을 것입니다, 좋은 답변을 주셔서 대단히 감사합니다. –

+0

"[함수] 매개 변수 또는 결과 목록 내에서 이름 (IdentifierList)이 모두 있거나 모두 존재해야하며, 존재하는 경우 각 이름은 지정된 유형의 항목 (매개 변수 또는 결과)을 나타내며, 각 타입은 그 타입의 하나의 아이템을 나타낸다 매개 변수와 결과리스트는 항상 괄호로 묶여있다. 단 하나의 이름없는 결과가 정확히 있다면 괄호 안의 타입으로 쓸 수있다. " http://golang.org/doc/go_spec.html#Function_types – peterSO