2. 함수 사용하기 2
페이지 정보
작성자 관리자 댓글 0건 조회 3,149회 작성일 19-03-12 21:47본문
2. 함수 사용하기 2
1. 재귀호출 사용하기
함수에서 자기 자신을 다시 호출하는 함수를 재귀함수라고 한다.
다음은 팩ㅌ리얼을 재귀함수로 구현한 예제이다.
package main
import "fmt"
func factorial(n uint64) uint64 {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func main() {
fmt.Println(factorial(5)) // 120
}
처음에 값 n을 받은 뒤 계속 n-1을 하여 자기 자신을 호출한다.
그리고 n이 0이 되면 1을 리턴한 뒤 재귀호출을 중단하고, 함수가 리턴되면서 곱셈 결과를 누적하는 방식이다.
2. 함수를 변수에 저장하기
var 변수명 func(매개변수 자료형) 리턴값_자료형 = 함수명
package main
import "fmt"
func sum(a int, b int) int {
return a + b
}
func main() {
var hello func(a int, b int) int = sum // 함수를 저장하는 변수를 선언하고 함수 대입
world := sum // 변수 선언과 동시에 함수를 바로 대입
fmt.Println(hello(1, 2)) // 3: hello 변수에 저장된 sum 함수 호출
fmt.Println(world(1, 2)) // 3: world 변수에 저장된 sum 함수 호출
}
함수를 정의한 뒤 미리 선언한 변수에 대입하기만 하면 함수를 변수에 저장할 수 있다.
Go 언어는 변수를 선언하고 대입할 때 자동으로 자료형을 추론할 수 있으므로 :=를 사용하면 간단하게 변수에 함수를 저장할 수 있다.
변수 뿐만 아니라 슬라이스(배열)에도 함수를 저장할 수 있다.
슬아이스 = []func(매개변수명 자료형) 리턴값_자료형 {함수명1, 함수명2}
package main
import "fmt"
func sum(a int, b int) int {
return a + b
}
func diff(a int, b int) int {
return a - b
}
func main() {
f := []func(int, int) int{sum, diff} // 함수를 저장할 수 있는 슬라이스를 생성한 뒤 함수로 초기화
fmt.Println(f[0](1, 2)) // 3: 배열의 첫 번째 요소로 함수 호출
fmt.Println(f[1](1, 2)) // -1: 배열의 두 번째 요소로 함수 호출
}
맵에도 함수를 저장할 수 있다.
맵 := map[키_자료형]func(매개변수명 자료형) 리턴값_자료형{ "키":함수명 }
package main
import "fmt"
func sum(a int, b int) int {
return a + b
}
func diff(a int, b int) int {
return a - b
}
func main() {
f := map[string]func(int, int) int{ // 함수를 저장할 수 있는 맵을 생성한 뒤 함수로 초기화
"sum": sum,
"diff": diff,
}
fmt.Println(f["sum"](1, 2)) // 3: 맵에 sum 키를 지정하여 함수 호출
fmt.Println(f["diff"](1, 2)) // -1: 맵에 diff 키를 지정하여 함수 호출
}
3. 익명함수 사용하기
함수 안에서 이름이 없는 익명 함수를정의한 뒤 바로호출할 수 있다.
func(매개변수명 자료형) 리턴값_자료형 {}()
package main
import "fmt"
func main() {
func() { // 함수에 이름이 없음
fmt.Println("Hello, world!")
}()
func(s string) { // 익명 함수를 정의한 뒤
fmt.Println(s)
}("Hello, world!") // 바로 호출
r := func(a int, b int) int { // 익명 함수를 정의한 뒤
return a + b
}(1, 2) // 바로 호출하여 리턴값을 변수 r에 저장
fmt.Println(r) // 3
}
익명함수는 함수를 정의한 뒤 ()(괄호)를 사용하여 바로 함수를호출한다.
댓글목록
등록된 댓글이 없습니다.