1. 재귀함수란?
: 함수 내에서 자기 자신을(함수)를 계속적으로 호출하는 방식. 함수가 콜 되면서 최근에 자신을 부른 원래 함수가 스택에 차곡차곡 쌓이게 됨. 중요한건 처음 불려진 함수에서(스택 맨 밑에있는 메소드) return 되는 값이 최종 return 값이 된다.
2. 팩토리얼(Factorial)
: 1부터 특정 정수까지의 곱한 수
3. 재귀함수를 통한 팩토리얼 풀이
package Weekly;
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int userInputNum = input.nextInt();
System.out.println(fact(userInputNum));
}
public static int fact(int n) {
if (n <= 1) {
return 1;
}
else {
return fact(n-1) * n;
}
}
}
* userInputNum 변수에 사용자가 입력하는 숫자를 담을 변수를 선언
* fact 함수를 호출하여 userInputNum의 정수를 대입한다.
* fact 메서드를 보면, if 문을 통해 함수의 break를 걸어주고 있다. 팩토리얼 특성 상 0!, 1!은 똑같이 1이기 때문에 return 값을 1로 했다.
* else문에는 return 값을 자기 자신의 함수로 설정해놨는데 이 로직은 n 숫자에 fact(n-1)이 지속적으로 엮이는 chain 같다고 생각하면 조금 편하더라
예를 들어, userInputNum = 5 라고 하자. fact(5)가 실행이 되고 5 * fact(4)로 리턴한다. 이후, 5 * 4 * fact(3) 이고, 또 5 * 4 * 3 * fact(2) 가 되고. 기존 값들을 계속 리턴하면서 메모리에 누적시키고 if 조건문을 통해 break로 빠져나오게된다. fact가 if에서 설정한 숫자만큼 분열되는 느낌..(?) 이다.
'Programming > Algorithm' 카테고리의 다른 글
빅오 표기법(Big-O notation), 시간복잡도, 공간복잡도 (0) | 2021.11.08 |
---|---|
[백준] 1110번 : 더하기 사이클 (0) | 2021.10.29 |
[백준] 2434번 : 별 찍기 - 1 (0) | 2021.10.27 |
[백준] 3052번 : 나머지 (Java) (0) | 2021.10.27 |
[백준] 빠른 A+B (JAVA) (0) | 2021.10.20 |