순환함수(Rescursion Function)이란?
- 함수가 자기 자신을 반복적으로 호출하는 것
- 재귀함수라고도 한다.
그림으로 이해하는 순환함수
간단한 예제로 이해하는 순환함수
window.onload = main();
function main() {
whoAreYou(); // = 너는 누구야?
}
function whoAreYou() {
console.log("저번에도 누가 물어봤었지");
whoAreYou();
}
위 그림을 코드로 옮긴 모습이다.
이걸 실행하고 콘솔창을 확인하면 자기 자신을 계속 호출하는 무한 루프를 실행하고 있는 것을 확인할 수 있다. 즉, 순환함수란 자기 자신을 반복적으로 호출하는 것이다.
그렇다면 순환함수는 무한루프밖에 안될까?
방금 보여준 예시에서 외계인한테 이런 상황이 3번 밖에 없었다면 코드를 이렇게 수정하게 된다.
window.onload = main();
function main() {
let num = 3;
whoAreYou(num); // = 너는 누구야?
}
function whoAreYou(num) {
if(num<=0){
console.log("난 외계인이야");
return;
}
console.log("저번에도 누가 물어봤었지");
whoAreYou(num-1);
}
이런식으로 코드를 바꾸게 되면 3번밖에 실행을 하지 않게 된다.
순환함수의 활용 (팩토리얼)
재귀함수의 대표적인 활용이자 가장 기초적인 예시인 팩토리얼 예시로,
5!를 하게 되면 5~1까지의 숫자를 모두 곱하게 됩니다. 다른 예시를 몇가지 더 들자면
6! → 6 * 5 * 4 * 3 * 2 * 1
4! → 4 * 3 * 2 * 1
이런식으로 계산하게 된다. 5의 팩토리얼을 구하는 코드를 짜게 되면
window.onload = main();
function main() {
console.log(factorial(5));
}
function factorial(num) {
if(num === 0){
return 1;
}
return num * factorial(num-1);
}
이런식으로 짤 수 있게 된다.
'Theory' 카테고리의 다른 글
클라우드 서비스(Cloude Service) (0) | 2019.04.19 |
---|---|
TDD 간단하게 알아보기(Test Drivent Development) (0) | 2019.03.16 |
MVC 패턴(MVC Pattern) (0) | 2019.02.27 |
응용된 정렬 방법들 (셸, 병합, 퀵)에 대해 알아보자 (0) | 2019.02.26 |
기본적인 정렬 방법들(선택, 삽입, 버블)에 대해 알아보자 (0) | 2019.02.16 |