[Java] 재귀함수
by Choi HyeSun
재귀함수
-
함수 내에서 자기 자신(함수)를 특정 조건이 될 때까지 계속적으로 호출하여 풀어가는 방식
-
특정 조건 (if 조건문)이 들어 있고, 끝나는 조건이 파라미터로 들어감
-
return에서 자기 자신을 호출하거나, return은 void로 두고 if문에서 자기 자신을 호출하거나
-
-
Stack이라고 생각할 수 있음
- 함수를 호출하면서 Stack에 차곡차곡 쌓이게 됨
-
장점 : 코드가 간결, 오류 수정이 용이
-
단점 : 코드를 사람이 이해하기 어려움, 기억 공간을 많이 차지함
재귀함수 적용 비교(팩토리얼)
재귀함수 미적용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
new Main().test();
}
public void test() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
int a = Integer.parseInt(br.readLine());
br.close();
bw.write(factorial(a)+"");
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public int factorial (int num) {
int total = num;
for (int i = 1; i < num ; i++) {
total *= num-i;
}
if (total == 0) {
total++;
}
return total;
}
}
재귀함수 적용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
new Main().test();
}
public void test() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
int a = Integer.parseInt(br.readLine());
br.close();
bw.write(factorial(a)+"");
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public int factorial (int num) {
if (num > 1) {
return factorial(num-1) * num;
} else if (num == 1) {
return num;
} else {
return 1;
}
}
}
재귀함수의 이해
-
호출 흐름
-
stack에 넣는다고 한 것 같은 이유 (나중에 들어온게 먼저 나감)
Subscribe via RSS