함수가 직접 또는 간접적으로 자기 자신을 호출하는 프로세스를 말합니다.
재귀함수의 종료지점을 유의하여 구현을 진행하여야 스택오버플로우가 발생하지 않으니 주의하여 구현해야합니다.
재귀함수는 스택프레임을 사용합니다.
<aside> 💡 스택프레임은 모든 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 완전 소멸한다.
</aside>
피보나치 수열과 같이 for문으로 구현할 수 있는 간단한 기능은 for문으로 구현하는 것이 재귀함수로 구현하는 것 보다 성능이 우수합니다. 재귀함수는 스택프레임이 사용되기 때문입니다.
아래는 자연수 N이 입력되면 재귀함수를 이용하여 1부터 N까지 출력하는 프로그램
을 구현한 것입니다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
DFS(sc.nextInt());
}
public static void DFS(int n){
if (n==0) return;
else {
DFS(n-1);
System.out.println(n);
}
}
N
이 0
이 될 때까지 N-1
을 매개변수로 받는 자기 자신을 반복적으로 호출합니다.0
이 되었을 시 return
을 해주어, 호출되었던 DFS 함수의 출력문이 실행됩니다.아래는 입력받은 10진수를 2진수로 출력하는 프로그램
을 재귀함수로 구현한 것입니다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
T.DFS(sc.nextInt());
}
public void DFS(int n){
if(n==0) return;
else {
DFS(n/2);
System.out.print(n%2);
}
}
N
이 0
이 될 때까지 N/2
를 매개변수로 받는 자기 자신을 반복적으로 호출합니다.0
이 되었을 시 return
을 해주어, 호출되었던 DFS 함수의 출력문이 실행됩니다.