Go 기초 3. 함수

함수

프로그램에서의 함수는 기능들은 모아노은 것이다.

func 함수명(input)
~~~
~~~
return

함수의 기능

모듈화: 반복작업을 하지 않게끔 해준다.

분리: 함수를 호출하는 쪽과 함수의 내용을 분리 시켜준다.

ex)

package main

import "fmt"

func add(x int, y int) int {
	return x + y
} // add 라는 함수를 만들어 정수인 x,y 값을 인자로 받아 x+y를 수행해 돌려주고 그값은 정수가 된다.

func main() {

	for i := 0; i < 10; i++ {
		fmt.Printf("%d + %d = %d\n", i, i+2, add(i, i+2)) // add()로 함수를 호출 하고 괄호안에 각각의 인자를 복사해서 넣어 준다. 
	}
}
--------------------------
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20

재귀호출

recursive call 함수안에서 같은 함수를 호출한다.
무한히 호출 되는 함수이기 때문에 탈출하는 명령어가 반드시 필요하다.

ex1)

package main

import "fmt"

func main() {

	f1(10)
}

func f1(x int) {
	if x == 0 {
		return // 반복되는걸 빠져나오게 해줌
	}
	fmt.Println(x)
	f1(x - 1) // 함수안에서 또 함수를 호출하여 반복하게 만듦
}
---------------------------
10
9
8
7
6
5
4
3
2
1

ex2)

package main

import "fmt"

func main() {

	f1(10)
}

func f1(x int) {
	if x == 0 {
		return
	}
	fmt.Printf("f1(%d) before call f1(%d)\n", x, x-1)
	f1(x - 1)
	fmt.Printf("f1(%d) after call f1(%d)\n", x, x-1)
}
-------------------------------
f1(10) before call f1(9)
f1(9) before call f1(8)
f1(8) before call f1(7)
f1(7) before call f1(6)
f1(5) before call f1(4)
f1(4) before call f1(3)
f1(3) before call f1(2)
f1(2) before call f1(1)
f1(1) before call f1(0)
f1(1) after call f1(0)
f1(2) after call f1(1)
f1(3) after call f1(2)
f1(4) after call f1(3)
f1(5) after call f1(4)
f1(6) after call f1(5)
f1(7) after call f1(6)
f1(8) after call f1(7)
f1(9) after call f1(8)
f1(10) after call f1(9)

ex3) 1부터 10까지의 합계

package main

import "fmt"

func main() {

	s := sum(10, 0)
	fmt.Println(s)
}

func sum(x int, s int) int {
	if x == 0 {
		return s
	}
	s += x
	return sum(x-1, s)
}
-------------------------------
55

재귀호출과 반복문

재귀호출과 반복문은 비슷하지만 상황에 따라 각 각 편한 상황이 있다.
수학 정의를 구현할때는 재귀호출
그 외 는 반복문이 편하다

ex)피보나치 수열

package main

import "fmt"

func main() {
	rst := f(10)
	fmt.Println(rst)
}

func f(x int) int {
	if x == 0 {
		return 1
	}
	if x == 1 {
		return 1
	}
	return f(x-1) + f(x-2)
}
------------------------------
89

좋은 웹페이지 즐겨찾기