재귀함수 함수 내에서 자기 자신(함수)를 특정 조건이 될 때까지 계속적으로 호출하여 풀어가는 방식 특정 조건 (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에 넣는다고 한 것 같은 이유 (나중에 들어온게 먼저 나감)