선수로 산다, 때론 좋은 코치로
[golang] A Tour of Go - 44 연습 문제 본문
[golang] A Tour of Go - 44 연습 문제
https://go-tour-kr.appspot.com/#44
함수를 가지고 놀아봅시다.
fibonacci 함수를 구현합니다. 이 함수는 이어지는 피보나치 수를 반환하는 함수 (클로져)를 반환해야 합니다.
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
Go 언어는 최근의 언어답게 함수를 값으로 할당할 수 있습니다. 그리고 클로져라는 개념도 있습니다.
클로져 개념은 Javascript를 이용해서 힘들게 이해하고 있습니다. Javascript를 자주 사용하지 않습니다.
피보나치 수는 0과 1로 시작하며, 다음 피보나치 수는 바로 앞의 두 피보나치 수의 합이 된다. - 위키백과
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, ...
f(0)=0, f(1)=0, f(n)=f(n-1)+f(n-2), n>1
이 문제는 클로져를 이용해서 문제를 풀어야 합니다. 호출할 때마다 fn2를 계산합니다.
fn2 := fn1 + fn0
fn1, fn0 = fn2, fn1 //Go에서는 변수 두개에 한 번에 값을 할당 할 수 있음
if fn2 == 0 { fn1 =1 }
피보나치 수는 재귀함수나 메모이제이션에서 연습하는 문제인데 클로저를 이해할 때도 활용하네요
func fibonacci() func() int {
fn0 := 0
fn1 := 0
return func() int {
fn2 := fn1 + fn0
fn1, fn0 = fn2, fn1
if fn2 == 0 {
fn1 = 1
}
return fn2
}
}
A Tour of Go 예제 관련
- A Tour of Go - 36 연습 문제, 슬라이스 이중배열 관련, http://godsman.tistory.com/23
- A Tour of Go - 41 연습 문제, golang의 맵, http://godsman.tistory.com/24
- A Tour of Go - 44 연습 문제, (클로저)함수를 리턴, http://godsman.tistory.com/25
'개발 관련 > go' 카테고리의 다른 글
[golang] A Tour of Go - 56 연습 문제 (0) | 2018.02.12 |
---|---|
[golang] A Tour of Go - 48 연습 문제 (0) | 2018.02.12 |
[golang] A Tour of Go - 41 연습 문제 (0) | 2018.02.01 |
[golang] A Tour of Go - 36 연습 문제 (0) | 2018.02.01 |
[golang] Go 언어 참고자료 (0) | 2018.02.01 |