재귀 함수란 어떤 함수에서 자신을 다시 호출하여 작업을 수행하는 방식의 함수이다.
🚨 함수 내에서 다시 자신을 호출한 후 그 함수가 끝날 때 까지 함수 호출 이후의 명령문이 수행되지 않는다는 사실과 종료조건이 꼭 포함되어야 한다는 부분을 인지하고 작성하면 무한루프를 방지할 수 있다.
✏️ 자연수 N이 입력되면 재귀함수를 이용하여 1부터 N까지를 출력하는 프로그램을 작성해보자.
예시로 N을 3이라고 하자.
위 코드처럼 작성한다면 3부터 1까지 출력될 것이다.
🙋🏻♀️ 나는 1부터 3까지 반대로 출력하고 싶어!
그렇다면 recursive(i-1);
을 console.log 보다 먼저 작성해주면 된다.
왜 코드 순서만 바꿔주어도 결과가 반대로 나오는지 알아보자!
1. i가 3일때, recursive(3)
의 정보를 stack에 삽입한다.
(stack에는 매개변수, 지역변수, 함수호출,복귀 정보가 저장된다.)
2. recursive(i-1);
을 만나 그 다음의 console.log를 실행하지 않고 자기 자신인 recursive(2)
를 호출한다.
3. i가 2일때, recursive(2);
의 정보를 stack에 삽입한다.
4. recursive(1)
을 호출
5. i가 1일때, recursive(1)
의 정보를 stack에 삽입한다.
6. i가 0일때, 함수를 종료한다.
7. console.log(i);
을 실행한다.
8. stack 상단의 recursive(1)
을 출력하며 복귀 주소인 recursive(2)
로 이동한다.
9. stack의 모든 정보를 꺼낼 때 까지 8번 과정을 반복하여 실행한다.