[F-Lab 모각코 챌린지 - 4(2)일차] - 재귀(Recursion)

Big One·2023년 5월 14일
0

F-Lab

목록 보기
59/69

재귀란?

종료 지점(종료 조건)까지 반복 수행하는 것이다.

자기자신을 호출하는 함수를 의미한다.

재귀함수를 사용하는 이유

JSON.parse, JSON.stringfy, getElementById 등 구현하면 재귀적이다 .

음 …………. 사용하는 함수들이 재귀적으로 이루어져있어서? 인가 ..

스택 호출하기

재귀 함수가 자신을 계속 호출하고 또 호출하면, 보이지 않는 곳에서 어떤 일이 일어날까? 오류가 생기지 않는 효과적인 코드를 작성하려면 이걸 이해해야한다!

함수를 호출하면 자바스크립트는 콜스택에 쌓인다. ㅇㅇ V8엔진인가 콜스택 쌓임

기본 요소

  • 하나의 함수가 자기 자신을 재귀적으로 호출하게 해야한다.
  • 종료 지점(종료 조건 base case)이 있어야한다 . 재귀가 멈추는 시점이다.

자주 발생하는 문제

  • 종료 조건이 없거나 잘못된 경우
  • 잘못된 값을 반환하거나, 애초에 반환하는걸 잊는 경우
    • 종료 조건에 if (num===1) console.log() → 종료 안됨..
    • return num * factorial(num) → 무한반복 … 스택오버플로우 발생

Helper 메소드 재귀

헬퍼 메소드 재귀는 재귀적이지 않은 외부 함수가 재귀적인 내부 함수를 호출하는 패턴이다.

즉, 함수 안에 재귀함수를 만들어 사용하는 것

이유는 배열일 때 재귀함수만 쓰면 배열을 계속 초기화 하니까 ..

출력값이 배열이나 배열과 비슷한 종류의 객체를 반환할 때 주로 사용한다.

순수 재귀

재귀 함수로만 작성되어진 것

웬만하면 helper 이 더 직관적이여서 선호하지만

배열을 사용하고 헬퍼 메소드 없이 순수 재귀를 작성하는 경우에 배열을 복사하는 slice, spread 연산자(operater), concat 같은 메소드를 사용할 수 있다. 그러면 배열을 변경할 필요가 없다. 그리고 일종의 결과를 축적할 수 있다.

문자열은 변경할 수 없다. slice, substring을 사용해서 사본을 만들어야한다.

객체의 경우, Object.assign, spread 연산자를 사용하는게 유용하다.

profile
이번생은 개발자

0개의 댓글