재귀 : 자신을 정의할 때 자기 자신을 재참조하는 방법 (=자기호출)
* 정의 자체가 순환적으로 되어 있는 경우에 적합한 방법
재귀적 구조 : 어떤 문제 안에 크기만 다른 성격이 똑같은 작은 문제가 포함
예) factorial
n! = n * (n-1)!
예) 수열의 점화식
a(n) = a(n-1) + 2
* 대부분의 순환은 반복으로 바꾸어 작성할 수 있다.
<factorial - 반복적인 방법>
1
2
3
4
5
6
7
|
public static int factorial(int num) {
int result = 1;
for(int i = num; i > 0; i--) {
result *= i;
}
return result;
}
|
cs |
<factorial - 재귀 방법>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println(num+"! = " + factorial(num));
}
public static int factorial(int num) {
if (num == 1)
return 1;
return num * factorial(num - 1);
}
}
|
cs |
입력 : 5
출력 : 5! = 120
facotrial 만 놓고 비교해보면 재귀함수를 사용한 경우가 간결하다.
재귀함수를 사용하면 반복문을 사용하는 것보다 속도가 빨라지며, 가독성이 높아진다.
'성장 일기 > 알고리즘' 카테고리의 다른 글
[JAVA] Stack(스택) (0) | 2021.04.04 |
---|---|
[재귀] 백준 java(자바) #2447 별 찍기 - 10 (0) | 2021.03.25 |
[재귀] 백준 JAVA(자바) #11729 하노이 탑 이동 순서 (0) | 2021.03.25 |
[2020 카카오 인턴] 보석 쇼핑(JAVA) (0) | 2021.02.02 |
[JAVA]QUEUE(큐) (0) | 2021.02.02 |