코드 그라데이션
Day14. 재귀함수의 개념 본문
재귀함수
: 내가 나를 부르는 함수
더 정확하게는 함수 내부에서 자기가 자기를 호출하면서 작업을 수행하는 방식.
* 재귀함수는 특정한 종료 조건이 있어야 함.
=> 그렇지 않으면 함수가 무한히 호출되어 StackOverflowError와 같은 예외가 발생할 수 있음.
코드 예시
static int abc(int a){
if(a == 0){
return 0
}
else {
return abc(a-1) + a;
}
}
이러한 상황인 것인데,
<실행 흐름>
먼저 abc(5)가 호출되면 0이 아니므로 abc(4) 가 되고 num에는 5가 저장
다음으로는 abc(4)가 호출되는데 0이 아니므로 abc(3)이 되고 num에는 4가 저장
다음으로는 abc(3)이 호출되는데 0이 아니므로 abc(2)가 되고 num에는 3이 저장
다음으로는 abc(2)가 호출되는데 0이 아니므로 abc(1)이 되고 num에는 2가 저장
다음으로는 abc(1)이 호출되는데 0이 아니므로 abc(0)이 되고 num에는 1이 저장
다음으로는 abc(0)이 호출되는데 0!!! 이므로 0이 리턴된다.
이제 다시 자기를 부른 쪽으로 역행해서 올라가므로
0 에서 1 을 더해서 1이 나온 값이 abc(1) 에 저장되고
abc(1) = 1 과 남아있던 2 가 더해져서 3이 되어 abc(2) 에 저장되고
abc(2) = 3 과 남아있던 3이 더해져서 6이 되어 abc(3)에 저장되고
abc(3) = 6 과 남아있던 4가 더해져서 10이 되어 abc(4) 에 저장되고
abc(4) = 10과 남아있던 5가 더해져서 15가 되어 abc(5) 에 저장된다.
따라서 최종적으로 abc(5)의 값으로 15가 리턴 되는 것이다.
728x90
'Java > Mega' 카테고리의 다른 글
Day16 (1). 생성자 (0) | 2023.04.05 |
---|---|
Day15. 클래스 도입 (0) | 2023.04.05 |
Day14. 별찍기+구구단 메서드화 (0) | 2023.04.02 |
메서드화 연습하기 (0) | 2023.04.02 |
Day13 Quiz02 짝수 홀수 판별 퀴즈 의문점 추가해결 (0) | 2023.04.02 |
Comments