es6 함수의 꼬리 귀속법 실례 분석

1936 단어
본고의 실례는 es6 함수의 꼬리 귀속용법을 서술하였다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다.
함수 호출 자체를 귀속이라고 하고, 만약 꼬리 호출 자체를 귀속이라고 한다.
귀속은 메모리를 매우 소모한다.수천 수백 개의 호출 프레임을 동시에 저장해야 하기 때문에'창고 넘침'오류 (stack overflow) 가 발생하기 쉽습니다.그러나 꼬리 귀속에 있어서, 호출 프레임이 하나만 존재하기 때문에, 영원히'창고 넘침'오류가 발생하지 않습니다.

function factorial(n) {
 if (n === 1) return 1
 return n * factorial(n - 1)
}


후퇴로 변경하면 호출 레코드 하나만 유지됩니다. 복잡도 O(1)

function factorial(n, total = 1) {
if (n === 1) return total
return factorial(n - 1, n * total)
}

factorial(5)


비꼬리 귀속의 Fibonacci 수열은 다음과 같다.

function Fibonacci (n) {
 if ( n <= 1 ) {return 1};

 return Fibonacci(n - 1) + Fibonacci(n - 2);
}

Fibonacci(10) // 89
Fibonacci(100) //  
Fibonacci(500) //  


끝부분 최적화된 Fibonacci 수
열의 실현은 다음과 같다.

function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {
 if( n <= 1 ) {return ac2};

 return Fibonacci2 (n - 1, ac2, ac1 + ac2);
}

Fibonacci2(100) // 573147844013817200000
Fibonacci2(1000) // 7.0330367711422765e+208
Fibonacci2(10000) // Infinity


꼬리 귀속의 실현은 종종 귀속 함수를 고쳐서 마지막 단계에서 자신만 호출할 수 있도록 해야 한다.이 점을 하는 방법은 모든 내부 변수를 함수의 매개 변수로 바꾸는 것이다.
함수식 프로그래밍은 코리화(currying)라는 개념이 있는데 다중 파라미터의 함수를 단일 파라미터의 형식으로 바꾸는 것을 의미한다.이곳은 크리화를 사용할 수 있다.

function currying(fn, n) {
return function(m) {
return fn.call(this, m, n)
}
}


관심 있는 친구는 온라인 HTML/CSS/JavaScript 코드 실행 도구를 사용할 수 있습니다.http://tools.jb51.net/code/HtmlJsRun상기 코드 운행 효과를 테스트하다.
자바스크립트에 관한 더 많은 내용은 본 사이트의 주제를 볼 수 있습니다. 자바스크립트 상용 함수 기교 총결, 자바스크립트 대상 입문 강좌, 자바스크립트 오류와 디버깅 기교 총결, 자바스크립트 데이터 구조와 알고리즘 기교 총결 및 자바스크립트 수학 연산 용법 총결
본 논문이 여러분의 JavaScript 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기