[Codecamp-Week6] Recursive Functions (재귀함수)

·2022년 8월 10일
0
post-custom-banner

이름부터 희한한 재귀함수...
지난주에 재귀함수 문제를 풀다가 탈모가 오는줄 알았다ㅎㅎ

오늘은 이름부터 이상한 재귀함수에 대해 살펴보고 싶지 않지만 살펴보자....!

1. Recursive Functions(재귀함수)란?

재귀함수란 함수가 직접 또는 간접적으로 자신을 호출하는 함수다. 즉, 함수가 계속해서 자신을 실행하여 반복하는 기능이다.

재귀함수는 다른 코드들과 달리 코드의 어느 부분에서 어느 부분으로 언제 오고 가게 되는지, 현재 어떤 상태에 있는 건지 파악하는 것이 어려운 함수라고 한다.

재귀함수에 대해 공장 생산라인으로 쉽게 비유한 글이 있어 인용해와봤다!

[ 프로그램이 실행되는 전체 과정 ]

  • 프로그램 입력 = 제품의 기초 재로
  • 소스 코드 = 직원들의 메뉴얼
  • 각각의 직원 = 하나의 함수
    --> 프로그램에 들어온 입력 (생산 라인에 들어온 기초 재료)을 여러 함수들 (여러 직원들)이 순차적으로 처리 (순차적으로 가공)하여 정답을 구하는 (제품을 완성하는) 과정

[ 프로그램 실행 과정에 재귀 함수가 포함되는 경우]

  • 각각의 직원 = 메뉴얼에 적힌 내용에 따라 '실제로' 일을 하는 주체
    --> 소스 코드는 그저 메뉴얼에 불과하므로, 메뉴얼은 하나지만 같은 메뉴얼대로 작업하는 직원은 여럿이 될 수 있다. 세부적인 작업 내용은 그 직원이 이전 단계로부터 넘겨 받은 재료(= 함수의 인자 또는 전역 변수)의 상태에 따라 달라질 수 있다.

--> 재귀 호출 = 한 직원이 자신과 같은 메뉴얼에 따라 작업하는 다른 직원에게 특정 상태의 재료들을 건네며 작업을 요청하고 그 결과물을 돌려받는 과정

(순차적인 작업만을 가정하므로 직원 A가 직원 B에게 일을 넘긴 후 B가 일을 마치고 결과물을 A에게 돌려주기 전까지 A는 아무것도 하지 않는다.)

2. 재귀 특성

(1) 재귀는 같은 일을 하는 함수끼리 상태만 달리해서 호출하는 것이다.

(2) 재귀 호출된 함수가 무슨 일을 했는지는 중요하지 않고, 어떤 결과를 돌려주는지만 중요하다.

(3) 재귀를 사용하는 함수는 반드시 재귀 호출을 하지 않는 경우를 하나 이상 포함해야 한다. 그렇지 않으면 무한 루프에 빠지게 된다.

3. 재귀 함수 예제 살펴보기

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

<참조 : https://www.secmem.org/blog/2021/07/09/recursion/>

profile
개발을 개발새발 열심히➰🐶
post-custom-banner

0개의 댓글