자바스크립트 재귀함수(호출)
Javascript 2012. 4. 4. 17:49
재귀함수(호출)란?
정의:
1. 자기 자신을 재호출하는 함수를 말한다.
2. 보통 트리 구조에 대한 알고리즘을 작성할 때 유용하며, 그 외에 여러 가지로 활용할 수 있습니다.
-
function reflection(base, i)
-
{
-
var r = ''
-
-
if (i === 0){
-
r = 1;
-
}
-
else{
-
r = base * reflection(base, i - 1);
-
}
-
-
return r;
-
}
-
-
-
reflection(2, 2); // 4
아래는 작성된 재귀함수의 실행 순서를 나타냅니다.
1. reflection() 함수를 호출합니다.
2. reflection() 함수의 매개변수 base와 i의 값으로 각 각 2 가 정의 됩니다.
3. 최초 매개변수 i의 값이 0이 아니므로 조건문 내부의 else 블록({}) 9번라인의 표현식이 실행됩니다.
4. 자바스크립트의 표현식은 오른쪽에서 왼쪽으로 평가되므로 i가 2일 때 재귀호출 reflection(base, i - 1)의 반환 값은 2를 반환하며, 그에 따라 ((base(2)) * (재귀호출 반환 값(2))) 4를 최종 반환합니다.
앞에서도 말했듯이 재귀함수는 트리 구조 탐색에 유용하게 쓰일 수 있다고 하였습니다.
아래는 그에 대한 예제 소스입니다.
- // 해당 엘리먼트에 포함된 모든 textNode.nodeValue를 가져온다.
-
function text(elem, txt)
-
{
-
-
var t = [];
-
-
if (!txt)
-
{
-
elem = elem.childNodes || elem;
-
-
for (var i = 0, length = elem.length; i < length; i++){
-
-
var e = elem[i];
-
t.push(e && e.nodeType !== 1 ? e.nodeValue : text(e.childNodes));
-
}
-
}
-
else
-
{
-
t.push(createTextNode(elem, txt));
-
}
-
-
return t.join('').replace(/(^[\s]*)|([\s]*$)/g, '');
-
};
-
-
-
// text 노드 생성
-
function createTextNode(elem, txt){
-
-
elem = elem || document.documentElement;
-
-
txt = txt || '';
-
-
var $t = document.createTextNode(txt);
-
-
elem.appendChild($t);
-
-
return text(elem);
-
};
-
-
alert(text(null, 'test')); // ....test
-
alert(text(document.body, 'test')); // ....test
-
alert(text(document.getElementById('test1'), 'test')); // ....test
작성된 코드에 대해 설명하자면, 함수 매개변수로 해당 엘리먼트와 동적으로 삽입시킬 text를 정의하여 호출할수 있습니다.
또한, 매개변수가 한 개만 있는 경우는 해당 엘리먼트에 포함된 모든 text를 가져오며, 두 번째 매개변수인 text를 정의하면 해당 text가 정의된 text 노드를 반환하게 됩니다.