>  기사  >  웹 프론트엔드  >  js의 재귀 함수 사용 소개

js의 재귀 함수 사용 소개

黄舟
黄舟원래의
2016-12-12 14:41:121243검색

10 이내의 팩토리얼을 시도해 보겠습니다.

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>js中递归函数的使用</title> 
<script type="text/javascript"> 
function f(num){ 
if(num<1){ 
return 1; 
}else{ 
return f(num-1)*num; 
} 
} 
</script> 
</head> 
<body> 
<script type="text/javascript"> 
alert("10!的结果为:"+f(10)); 
</script> 
</body> 
</html>

재귀 함수 호출은 여기까지입니다.

js 재귀 함수가 자신을 호출할 때의 보험 방법.
js 고급 프로그래밍에서
일반적인 계승 재귀 함수:

function fact(num){ 
if (num<=1){ 
return 1; 
}else{ 
return num*fact(num-1); 
} 
}

다음 코드는 오류를 일으킬 수 있습니다.
var anotherFact =fact
fact = null ;
alert(antherFact(4)); //오류

fact가 더 이상 함수가 아니기 때문에 오류가 발생했습니다.
실행 중인 함수에 대한 포인터인args.callee를 사용하면 문제를 해결할 수 있습니다.
새 함수는 다음과 같습니다.

function fact(num){ 
if (num<=1){ 
return 1; 
}else{ 
return num*arguments.callee(num-1); //此处更改了。 
} 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //结果为24.

JS 일반 재귀 개선

재귀 함수는 아래와 같이 함수가 이름으로 자신을 호출할 때 형성됩니다.

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * factorial(num-1); 
} 
}

이것은 고전적인 계승 함수입니다. 겉으로는 아무런 문제가 없어 보이지만, 다음 코드를 실행하면 문제가 발생할 수 있습니다.
var anotherFactory = 계승;

anotherFactorial(4); //출력 24
factorial = null
anotherFactorial; (4); //TypeError: 객체 [object Window]의 'factorial' 속성은 함수 크롬에서 테스트
그 이유는 우리가 정의한 함수 이름이 실제로는 함수를 가리키는 포인터인데 이때 anotherFacttorial이 정의되어 있기 때문입니다. 또한 해당 함수를 가리키므로 anotherFactory(4)를 호출하면 24를 성공적으로 출력할 수 있습니다.
이때 Factorial = null; 그러면 실행 정의 함수에 대한 참조는 anotherFactorial이고 anotherFactorial(4) 호출 시 위의 오류 메시지가 표시됩니다.
이때 인수.callee를 사용하여 함수 정의에서 팩토리얼을 대체할 수 있습니다.
함수 정의는 다음과 같습니다.

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * arguments.callee(num-1); 
} 
}

그런 다음 위의 4줄의 테스트 코드를 사용합니다. 마지막 줄 테스트 코드에서도 24가 성공적으로 출력됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.