안녕하세요송기석입니다.

 

아침에 해가 조금씩 길어 지고 있습니다. 아직 아침 운동하기에는 부족하지만 날이 풀리고 해가 길어지면 다시 아침 운동을 시작 것입니다. 저처럼 앉아서 일하는 시간이 분들은 아침 운동이 선택이 아니라 필수라 생각합니다.

재귀적 호출


재귀 함수는 직접 또는 간접적으로 자신을 호출 하는 함수입니다. 다음은 하노이 탑이라는 유명한 퍼즐에 대한 내용을 재귀 호출을 통해 해결했습니다. 하노이 탑에 대한 자세한 설명은 인터넷에게 검색하시면 됩니다.


var hanoi = function (disc, src, aux, dst) {
  if (disc > 0) {
    hanoi(disc - 1, src, dst, aux);
    console.log('Move disc ' + disc + ' from ' +src + ' to ' + dst);
    hanoi(disc - 1, aux, src, dst);
  }
};

hanoi(3, 'Src', 'Aux', 'Dst');

결과

"Move disc 1 from Src to Dst"
"Move disc 2 from Src to Aux"
"Move disc 1 from Dst to Aux"
"Move disc 3 from Src to Dst"
"Move disc 1 from Aux to Src"
"Move disc 2 from Aux to Dst"
"Move disc 1 from Src to Dst"

재귀 함수는 브라우저의 DOM(Document Object Model) 같은 트리 구조를 다루는 매우 효과적입니다.

 

DOM(Document Object Model) W3C 정한 개발 규정으로 RMFOVR, 텍스트, 헤드라인, 스타일 웹의 모든 요소가 자바 스크립트(Java Script) 스크립트 언어에 의해 조정될 있도록 해줍니다. DOM CSS, HTML, 스크립트 언어와 함께 DHTML 구성하는 핵심 기술입니다.

 

꼬리 재귀(tail recursion) 최적화는 함수가 자신을 재귀적으로 호출하는 것을 반환하는 방법으로 진행되는 재귀적 호출일 경우 이를 개선하여 속도를 매우 빠르게 향상시키는 반복 실행으로 대체하는 것입니다.


var factorial = function(i, a) {
  a = a || 1;
  if(i<2) {
    return a;
  }
  return factorial(i-1, a*i);
};

console.log(factorial(4));	// 24


현재 자바 스크립트는 이러한 유형에 대한 최적화를 제공하지 않고 있습니다.