공부_정리☆★

정리_JavaScript - 재귀함수 (Recursion)

SKim입니다 2020. 6. 28. 21:39

재귀: 함수가 자기 자신을 호출하는 순간

 

모든 재귀 함수는 3가지 key feature를 가져야 한다.

1. A Termination Condition

if (something bad happened ) { STOP };

fail-safe. 비상 브레이크.

재귀함수의 무한 반복 방지.

 

2. A Base Case

if (this happens) { Yay! We're done };

 

3. The Recursion

함수가 자기 자신을 호출하도록 한다.

 

 

 

예시1)

function factorial(x) {
  if (x < 0) return;   // TERMINATION
  if (x === 0) return 1;   // BASE
  return x * factorial(x - 1);   // RECURSION
}
factorial(3);
// 6

이것을 실행시키면

factorial(3)

= 3 * factorial(2)

= 3 * 2 * factorial(1)

= 3 * 2 * 1 * factorial(0)

= 3 * 2 * 1 * 1 → return (Base Case)

 

 

 

예시2)

function revStr(str){
  if (str === '') return '';   // BASE
  return revStr(str.substr(1)) + str[0];   // RECURSION
}
revStr('cat');
// tac

여기서는 Base Case = Termination Case라서

Termination Case가 따로 없다.

 

substr() 메소드는 string의 ()안의 위치부터 끝까지 반환한다.

 ex) 'cat'substr(1) === 'at'

 

str[] 메소드는 []안의 인덱스의 글자를 반환한다.

 ex) cat[0] === 'c'

 

 

 

그래서 이것을 실행시키면

return revStr(str.substr(1)) + str[0]   // cat
→ return revStr('at') + 'c'   // tac

 return revStr('t') + 'a'   // ta

return revStr('') + 't'   // t

if (str === '') return '';   ↑거꾸로 올라가면

 

→ return ‘’ + ‘t’ + ‘a’ + ‘c’   // tac

 

 

https://codeburst.io/learn-and-understand-recursion-in-javascript-b588218e87ea

 

Learn and Understand Recursion in JavaScript

I’ll walk you through two popular JS recursion examples in 10 minutes so you can finally understand how recursion works in JavaScript.

codeburst.io