JS의 재귀 구현 방법

php中世界最好的语言
풀어 주다: 2018-04-18 09:07:40
원래의
2803명이 탐색했습니다.

이번에는 노트가 무엇인지 알려드리겠습니다. 실제 사례를 살펴보겠습니다.

재귀 함수: 재귀 함수는 자신을 이름으로 호출하여 구성됩니다.

계승 함수를 재귀적으로 구현합니다.

방법 1: 함수 이름

 function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  console.log(factorial(4));
로그인 후 복사

을 사용하세요. 결과는 다음과 같습니다: 24;

그러나 이 재귀 구현 방법에는 다음 코드에 문제가 있습니다.

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  console.log(anthorFactorial(4));
로그인 후 복사

결과는 다음과 같습니다: 24;

하지만:

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));
로그인 후 복사

결과는 다음과 같습니다. 오류

그 이유는 다음과 같습니다:

우리가 정의한 함수 이름은 실제로 함수에 대한 포인터이고 우리가 정의한 anotherFactorial도 해당 함수를 가리키므로 anotherFactorial(4)를 호출하면 24

를 성공적으로 출력할 수 있습니다. Factorial = null인 경우 define function 실행 참조는 anotherFactorial에 남게 되며 anotherFactorial(4) 호출 시 위와 같은 오류 메시지가 출력됩니다.

이때, 함수 정의에서 팩토리얼을 대체하기 위해 Arguments.callee를 사용할 수 있습니다.

방법 2:args.callee

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*arguments.callee(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));
로그인 후 복사

를 사용하여 결과는 다음과 같습니다: 24

args.callee는 실행 중인 함수에 대한 포인터이므로,args.callee를 사용하여 함수에 대한 재귀 호출을 구현할 수 있습니다. 함수 이름 대신에args.callee를 사용하면 함수 호출 시 문제가 발생하지 않는다는 것을 확인할 수 있습니다. 따라서 재귀 함수를 작성할 때 함수 이름을 사용하는 것보다args.callee를 사용하는 것이 항상 더 안전합니다.
그러나 엄격 모드에서는 인수.callee에 스크립트를 통해 액세스할 수 없으며 이 속성에 액세스할 때 오류가 보고됩니다. 그러나 함수 표현식에 이름을 지정하면 동일한 효과를 얻을 수 있습니다.

방법 3: 명명된 함수 표현식을 통해

 var factorial=function f(num){
    if(num<=1){
      return 1;
    }else{
      return num*f(num-1);
    }
  };
  f=null;
  console.log(factorial(4));
로그인 후 복사

이 접근 방식은 엄격 모드와 비엄격 모드 모두에서 작동합니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:



위 내용은 JS의 재귀 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!