[TIL] 재귀 호출
재귀 호출이란?
메소드 내에서 메소드 자기 자신을 호출하는 방식
특징:
- 코드가 간결하며 오류 수정이 용이하다.
- 실행시간 관점에서 처리속도가 반복문보다 비효율적이다.
- 하나 이상의 종료 조건을 사용하여 재귀 호출을 종료 하도록 해야한다.
- 모든 재귀 호출은 원 문제를 부분 문제로 줄여가면서 종료 조건이 될 때 까지 반복한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package ex0804;
public class RecursiveCall_Ex2 {
public static void main(String[] args) {
User7 ob = new User7();
int s;
s = ob.sum(10);
System.out.println(s);
}
}
// 재귀 호출을 활용하여 입력한 숫자까지의 정수의 합
// 단점 : 속도가 상대적으로 느리다.(제어문,반복문 보다 느림)
class User7 {
public int sum(int n) {
return n > 1 ? sum(n - 1) + n : 1;
//10+sum(9)
//10+9+sum(8)
//10+9+8+sum(7)
//..
//10+9+8+7+6..+sum(1)
}
}
|
cs |
무한 반복되는 재귀 호출
함수 호출은 메모리의 stack영역을 사용하므로 무한 반복되는 재귀 호출은 StackOverflowError를 유발한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package ex0804;
public class RecursiveCall_Ex3 {
public static void main(String[] args) {
User8 u = new User8();
u.print(5);
// 컴파일오류 : 스택 오버플로우
// 스택 공간이 넘치면 StackOverflowError가 발생하고 프로그램 종료
// 스택 메모리 공간은 한정적임.
}
}
class User8 {
public void print(int n) {
System.out.println("start:"+n);
print(n-1);
System.out.println("end:"+n);
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[TIL] this , this() (0) | 2020.08.04 |
---|---|
[TIL] 비정형 인자 (가변 인수) (0) | 2020.08.04 |
[TIL] 메소드 오버로딩 (0) | 2020.08.03 |
[TIL]클래스의 활용 (0) | 2020.08.03 |
[TIL]메소드 (0) | 2020.07.31 |
댓글