이름부터 희한한 재귀함수...
지난주에 재귀함수 문제를 풀다가 탈모가 오는줄 알았다ㅎㅎ
오늘은 이름부터 이상한 재귀함수에 대해 살펴보고 싶지 않지만 살펴보자....!
재귀함수란 함수가 직접 또는 간접적으로 자신을 호출하는 함수다. 즉, 함수가 계속해서 자신을 실행하여 반복하는 기능이다.
재귀함수는 다른 코드들과 달리 코드의 어느 부분에서 어느 부분으로 언제 오고 가게 되는지, 현재 어떤 상태에 있는 건지 파악하는 것이 어려운 함수라고 한다.
재귀함수에 대해 공장 생산라인으로 쉽게 비유한 글이 있어 인용해와봤다!
[ 프로그램이 실행되는 전체 과정 ]
- 프로그램 입력 = 제품의 기초 재로
- 소스 코드 = 직원들의 메뉴얼
- 각각의 직원 = 하나의 함수
--> 프로그램에 들어온 입력 (생산 라인에 들어온 기초 재료)을 여러 함수들 (여러 직원들)이 순차적으로 처리 (순차적으로 가공)하여 정답을 구하는 (제품을 완성하는) 과정
[ 프로그램 실행 과정에 재귀 함수가 포함되는 경우]
- 각각의 직원 = 메뉴얼에 적힌 내용에 따라 '실제로' 일을 하는 주체
--> 소스 코드는 그저 메뉴얼에 불과하므로, 메뉴얼은 하나지만 같은 메뉴얼대로 작업하는 직원은 여럿이 될 수 있다. 세부적인 작업 내용은 그 직원이 이전 단계로부터 넘겨 받은 재료(= 함수의 인자 또는 전역 변수)의 상태에 따라 달라질 수 있다.--> 재귀 호출 = 한 직원이 자신과 같은 메뉴얼에 따라 작업하는 다른 직원에게 특정 상태의 재료들을 건네며 작업을 요청하고 그 결과물을 돌려받는 과정
(순차적인 작업만을 가정하므로 직원 A가 직원 B에게 일을 넘긴 후 B가 일을 마치고 결과물을 A에게 돌려주기 전까지 A는 아무것도 하지 않는다.)
count를 매개변수로 받고, 함수가 종료될 때까지 sum의 변수에 2를 더해주고 sum의 값을 리턴하는 함수를 완성하라!
function WhatIsRecursion_02(count) {
let sum = 0;
function recursion() {
if (count !== 0) {
sum += 2
count -= 1
return recursion()
} else {
return sum
}
}
return recursion()
}
WhatIsRecursion_02(6) // 12
WhatIsRecursion_02(20) // 40