마지막 귀속 시 창고 넘침 오류 해결
11274 단어 es6
function factorial (n) {
if (n === 1) return 1;
return n * factorial(n - 1) ;
}
factorial(5) // 120
factorial(100) // Stack Overflow error
상기 코드는 하나의 곱셈 함수로 꼬리에 값이 있고 함수 꼬리 호출에 속하지 않는다. n차 곱셈을 계산하면 n개의 호출 프레임이 있다. 해결 방법은 다음과 같다.
function factorial (n , total) {
if (n === 1) return total ;
return factorial(n - 1, n *total );
}
factorial(5, 1) // 120
그러나 이렇게 하면 직관적이지 않은 단점이 있다. 최적화는 다음과 같다.
function tailFactorial (n , total) {
if (n === 1) return total ;
return tailFactorial(n - 1 , n *total);
}
function factorial(n) {
return tailFactorial(n , 1);
}
factorial(5) // 120
최적화 2: 콜리화
function currying(fn, n) {
return function (m) {
return fn.call(this , m, n) ;
}
}
function tailFactorial (n , total) {
if (n === 1) return total ;
return tailFactorial(n - 1, n * total);
}
const factorial = currying(tailFactorial, 1) ;
factorial(5) // 120
최적화 3:es6 함수 기본값
function factorial (n, total = 1) {
if (n === 1) return total;
return factorial(n - 1 , n *total) ;
}
factorial(5) // 120
function Fibonacci(n) {
if ( n <= 1 ) {return 1};
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
Fibonacci(10) //89
Fibonacci(100) //
해결:
function Fibonacci2 (n , acl = 1, ac2 = 1) {
if ( n <= 1) {return ac2} ;
return Fibonacci2 (n - 1, ac2, acl + ac2);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript로 카드 놀이를 넘기는 애니메이션을 만들려고했습니다.카드를 넘기는 애니메이션을 만들어 보았습니다. 폴더 구성은 다음과 같습니다. 코드는 다음과 같습니다. card_turning.html 다음은 JavaScript 코드입니다. cardTurning.js 결과는, 이런 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.