Skip to content

Instantly share code, notes, and snippets.

@tae0y
Created May 11, 2019 06:00
Show Gist options
  • Save tae0y/55cfab62d32d08ebc28d8f88a5714118 to your computer and use it in GitHub Desktop.
Save tae0y/55cfab62d32d08ebc28d8f88a5714118 to your computer and use it in GitHub Desktop.
gotour fibonacci clousure
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
fibo, prev, tmp := 0, 1, 0
return func() int {
tmp = fibo
fibo += prev
prev = tmp
return fibo
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
// 문제 푸는 데 1시간, 초기값을 1로 주고 시작했더니 f(0)값이 안나와서 헤매다가
// 초기값을 0, 증가값을 1로 초기화해서 해결 ..... 으
// 고민 : fibo를 상위 함수 지역변수로 넣을 필요가 있을까? 그렇게 안하려면??
@tae0y
Copy link
Author

tae0y commented May 11, 2019

BETTER CODE
순서가 엇갈린 수열을 두개 만들기, 초기값1 증가값0
f를 하위함수 내부에 선언할 수 있게 되었다

idx init 0 1 2 3 4 5
f - 0 1 1 2 3 5
f1 1 1 2 3 5 8 13
f2 0 1 1 2 3 5 8
package main

import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
	f2, f1 := 0, 1
	return func() int {
		f := f2
		f2, f1 = f1, f+f1

		return f
	}
}

func main() {
	f := fibonacci()
	for i := 0; i < 10; i++ {
		fmt.Println(f())
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment