재귀 함수란?
함수 내에서 자기 자신을(함수)를 계속적으로 호출하면서 풀어가는 방식
함수가 콜 되면서 최근에 자신을 부른 원래 함수가 스택에 차곡차곡 쌓이게 됨.
중요한건 처음 불려진 함수에서(스택 맨 밑에있는 메소드) return 되는 값이 최종 return 값이 된다.
즉, 어떤 수 n을 선언했을 때, n부터 쭉 타고 들어가서 가장 작은 수까지 들어간 다음에
가장 작은 수가 해결이 되면 다시 값을 거슬러 올라가면서 계산을 해서 n!의 값을 반환한다.
팩토리얼 예제
public static int factorial(int n) {
if(n == 1) { return 1; }
return n * factorial(n-1);
// n! = n * factorial(n-1)
// 4! = 4 * 3!
// 3! = 3 * 2!
// 2! = 2 * 1!
// 1! --------> if문 실행
// 즉 제일 작은 단위까지 들어가서 확인하고,
// 확인이 완료되면 다시 거슬러 올라오면서 값을 계산하는 방식
}
피보나치 수열 예제
public static int fibonacci(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
// 구하고자 하는 값의 한 칸 앞의 값 + 두 칸 앞의 값
// n = (n-1) + (n-2)
// fibonacci(5) = fibonacci(4) + fibonacci(3)
}
'ALGORITHM' 카테고리의 다른 글
[백준 2331 Java] 분해합 / 각 자리의 합 구하기 (0) | 2020.12.31 |
---|---|
[백준 11729 Java] 하노이 탑 - 재귀, 분할 정복 (0) | 2020.12.31 |
[백준 2908 Java] 문자열 뒤집기 - StringBuffer / StringBuilder (0) | 2020.12.29 |
[백준 10809 Java] indexOf() (0) | 2020.12.28 |
[백준 4344 Java] 변수 선언 / 초기화 위치에 따른 변화 + 소수점 n째 자리까지 출력하기 (0) | 2020.12.25 |