N의 계승 입증하는데 사용 //
계산하는 단계에 저장된 데이터를, 다음 단계 후, 다음의 계산 시간이 지난이 수행되었는지 여부를 결정하고, 존재하는 경우 상기 저장된 값에 직접 액세스 계산되고
// n은! N * (N-1) * ... * 2 * 1
// 0! = 1
// n은! = N * (N-1)!
// 제 1 메모리 달성 의 처형 = 0 // 번호 VAR 카운트 기능 계승 (N-) { COUNT ++ IF (N-N -. == == 0 || 1) { . 창 1 } 복귀 * N 계승 (. N-- 1) } 대 (VAR I = 1]. I <= 5]. I ++) { CONSOLE.LOG (팩토리얼 (I)) }
// 실현 메모리 VAR COUNT = 0 // 번호 처형 VAR 캐시 = [] // 저장할 --- 때만 수행 계승 6x5 후 5, 6 등의 계산을 수행하고 데이터! 그리고 계승 (5)는 저장된 데이터로부터 문의가 작동 계승 (N-) { COUNT ++ IF (캐시 [N-]) { // 만약 캐시 (캐시의 값) 버퍼의 값에 직접 액세스 창 캐시 [N-] }는 다른 { // 어떤 계산이 수행되지 않는 (N-N. - == == 0 || 1) IF { . 캐시 [0] = 1 [. 1]. 캐시 = 1 . 창 1 }는 다른 { . 캐시 [N- * = N-계승 (N-- 1 ) 캐시를 반환 [N-] } } } console.time ( '3') CONSOLE.LOG (팩토리얼 (3)) console.timeEnd ( '3') CONSOLE.LOG ( '=================') console.time (4 '') CONSOLE.LOG (팩토리얼 (4)) console.timeEnd (4 '')
// 최적화 기능 계승 (N-) { IF (N-N -. == == 0 || 1 ) { 창 . 1 } 다른 { 창 N- * 계승 (N-- 1이다. ) } } // 래퍼 기능 함수 암기 (FN) { VAR {} = 캐시 // 객체의 값을 저장하는 데 사용 복귀 함수 () { VAR의 키 = +에서 arguments.length (인수) Array.prototype.join.call // 고유 식별 키를 달성 IF (캐시 [키]) { 창캐시 [키] } 다른 { // 사용 argumens 어레이 매개 변수의 종류 얻었다 = fn.apply 캐시하는 열쇠를 ( 이 본 인수) 반환 캐시 [키] } } } VAR Newf = 암기 (팩토리얼)