1. 재귀함수란?
함수 내에서 자기 자신을(함수)를 계속적으로 콜 하면서 풀어가는 방식이다.
스택(Stack)이라고 생각할 수 있다.
함수가 콜 되면서 최근에 자신을 부른 원래 함수가 스택에 차곡차곡 쌓이게 됨.
중요한건
처음 불려진 함수에서(스택 맨 밑에있는 메소드) return 되는 값이 최종 return 값이 된다
2. 팩토리얼이란?
3! = 3*2*1 = 6
4! = 4*3*2*1 = 24
5! = 5*4*3*2*1 = 120
3. 재귀 예제
문제 : 특정 숫자의 팩토리얼 구하기
간단하게 소스 투척
public class Factorial {
public static void main(String[] args) { int input = 4; // 4!
System.out.println(fact(input)); } public static int fact(int n) { if (n <= 1) return n; else return fact(n-1) * n; } } |
>> 결과
24 |
4. 원리
1) 처음 fact 메소드가 불린 것은 main 함수에서이다.
fact(4) 가 실행될 것이다.
2) fact(4)
n은 현재 4이다.
n은 1보다 크므로 else를 타고,
fact(3)이 호출된다.
3) 여기서 처음 호출된 fact(4)는 종료되지 않고 Stack에 쌓인상태로,
fact(4)가 호출한 fact(3)이 실행된다.
Stack
fact(4) |
Stack
fact(3) |
fact(4) |
fact(2) |
fact(3) |
fact(4) |
fact(2-1) * n 즉, 1 * 2 |
fact(3) |
fact(4) |
fact(3-1) * n 즉, 2 * 3 |
fact(4-1) * n 즉, 6 * 4 = 24 |
'Program > JAVA' 카테고리의 다른 글
[JAVA] 생성자 (0) | 2020.03.02 |
---|---|
[JAVA] Servlet :: Servlet(서블릿) 이란? (0) | 2016.12.07 |
[JAVA]객체와 인스턴스의 차이점 (0) | 2016.03.08 |
[JAVA]클래스(Class), 객체(Object), 인스턴스(Instance), 생성자(Constructor) (0) | 2016.03.08 |
상속(extends), 추상 클래스(abstract), 인터페이스(implement) 정리 (0) | 2015.09.14 |