하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로 문제를 해결하는 방법
→ 스택(Stack)이라고 생각할 수 있다.
→ 함수가 콜 되면서 최근에 자신을 부른 원래 함수가 스택에 차곡차곡 쌓이게 됨.
처음 불려진 함수에서(스택 맨 밑에있는 메소드) return 되는 값이 최종 return 값이 된다.
동적프로그램이나 병합정렬, 그래프탐색알고리즘 등의 특정한 부분의 개발에 유리하다.
가독성이 높다.
변수의 사용을 줄여준다.
단점
1. (For문에 비해) 속도 ↓
2. (For문에 비해) 메모리 낭비 ↑
3! = 3 * 2 * 1 = 6
4! = 4 * 3 * 2 * 1 = 24
5! = 5 * 4 * 3 * 2 * 1 = 120
public class for_factorial {
public static int factorial(int num) {
System.out.print(num + "! = ");
int sum = 1;
for(int i = num; i>=1; i--) {
sum *= i; // 반복문을 통해 i값의 곱을 sum에 결과값 저장
if(i == 1) {
System.out.print(i + " = ");
}else {
System.out.print(i +" x ");
}
}
return sum;
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
public class Factorial {
// 재귀함수로 factorial 구하기
public static int factorial(int num) {
if (num == 1)
return 1;
else
System.out.println("factorial(" + num + ")"); //몇번 호출했는지 확인해보죠
return num * factorial(num - 1);
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int result = factorial(10);
System.out.println(result);
}
public static int factorial (int num) {
if (num == 1)
return 1;
return num * factorial ( num - 1 );
}
}
참고: [JAVA] 재귀 기초 - 팩토리얼 (Factorial)
참고: [JAVA] 재귀함수를 사용한 Factorial
참고: [JAVA] 자바 재귀호출과 팩토리얼 함수