
📅2023. 12. 28 15일차
- 함수 내부에서 ‘자기 자신을 호출’하는 함수를 의미한다. 이를 통해서 함수가 자신을 반복적으로 호출하면서 원하는 결과를 도출할 수 있다.
- 프로그램에서 함수나 메서드를 호출할 때 해당 함수나 메서드의 실행이 끝날 때까지 실행되는 다른 함수나 메서드의 호출 정보를 저장하는 자료이다.
- 이 스택은 함수가 호출될 때마다 그 함수의 호출 정보를 저장하고 함수의 실행 결과가 반환되면 해당 함수의 호출 정보를 스택에서 제거한다.
- 호출 스텍은 디버깅, 예외 처리 및 재귀 함수와 같은 다양한 프로그래밍 작업에 사용된다.
💡 팩토리얼 이란?
public class Main {
public static void main(String[] args) {
System.out.println(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
}
public static int factorial(int n) {
if (n == 0) { // 기본 케이스
return 1;
} else { // 재귀 케이스
return n * factorial(n - 1);
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println(sumNaturalNumber(5)); // 15
}
public static int sumNaturalNumber(int n) {
if (n == 1) {
return 1;
} else {
return n + sumNaturalNumber(n - 1);
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println(power(2, 5)); // 15
}
public static int power(int base, int exponent) {
if (exponent == 0) {
return 1;
} else {
return base * power(base, exponent - 1);
}
}
}
public static int fibonacci(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
}
}
- 문제 -(8 + 2) * -(7 + 3) + 5
String exp = "-(8 + 2) * -(7 + 3) + 5";
int startPos = 0;
int endPos = 7;
String head = exp.substring(0, startPos);
String body = "(" + exp.substring(startPos + 1, endPos + 1) + " * -1)";
String tail = exp.substring(endPos + 1);
System.out.println("head : " + head);
System.out.println("body : " + body);
System.out.println("tail : " + tail);
System.out.println("전체 : " + head + body + tail);
public static boolean debug = false;
public static int runCallCount = 0;
public static int run(String exp) {
runCallCount++;
if(recursionDbug) {
System.out.printf("exp(%d) : %s\n", runCallCount, exp)
}
}
- 지금까지 계산기 구현 기능 로직 복습하기
- 재귀함수 찾아보기