자 바스 크 립 트 패키지 의 Fibonacci 수열
5443 단어 JavaScript
var count;
var count=0;
var fib=function(n){
count++;
if(n==1||n==2){
return 1;
}
else{
return fib(n-2)+fib(n-1);
}
}
상기 코드 에서 보 듯 이 재 귀 법 은 가장 간단 한 해결 방안 입 니 다. 여기 서 count 변 수 를 정의 한 것 은 세 가지 방법의 집행 효율 을 비교 하기 위해 서 입 니 다.
패 킷 푸 시
패 킷 전달 법 은 패 킷 을 닫 는 원 리 를 이용 하여 하나의 배열 (초기 [1, 1] 의 Fibonacci 수열) 을 두 함수 중간 에 존재 하고 내부 함수 가 끊임없이 호출 되 는 배열 을 통 해 배열 을 전체 변수 로 메모리 에 저장 하 는 것 입 니 다. 이렇게 하면 이 Fibonacci 수열 을 계속 확장 하고 최종 적 으로 원 하 는 Fibonacci 수 를 구 할 수 있 습 니 다. 다음은 코드 예제 입 니 다.
var count2=0;
var fiba = (function(){
var arr = [0,1,1]; // 0 ,
return function(n){
count2++;
var res=arr[n]; /* arr, , arr */
if(res){
return res;
}else{
arr[n]=fiba(n-1)+fiba(n-2);
return arr[n];
}
}
})();
여기 도 재 귀 를 사 용 했 지만 패 킷 을 닫 으 면 재 귀 횟수 가 크게 줄 어 들 었 다. 가장 먼저 fiba (3) 로 재 귀 하면 fiba (3) 를 배열 에 저장 할 수 있 기 때문에 배열 의 arr [3] + arr [2] 에 따라 fiba (4) 의 값 을 얻 고 여러 그룹 에 저장 할 수 있다. 이렇게 왕복 하면 최종 결 과 를 얻 을 수 있다.공간 으로 시간 을 바 꾸 는 전형 적 인 예 라 고 할 수 있다.
추이 법
전달 법 이 가장 효율 적 이 라 고 하려 면 for 순환 에서 fiba (n - 1) 와 fiba (n - 2) 의 값 을 계속 바 꾸 어 최종 결 과 를 구 합 니 다. 코드 는 다음 과 같 습 니 다.
var count3 = 0;
var fib3 = function (n) {
var x = 1;
var y = 1;
var z = 0;
if (n == 1 || n == 2) {
return 1;
} else {
for (var i = 2; i < n; i++) {
count3++;
z = x + y;
x = y;
y = z;
}
return z;
}
};
이 방법 도 이해 하기 쉬 울 것 입 니 다. 여 기 는 너무 많은 설명 을 하지 않 습 니 다. 다음은 호출 과정 이 고 같은 상황 에서 각자 count 의 값 을 제시 합 니 다.
세 가지 방법 을 호출 하 다
onload=function(){
var t = fib(8);
alert(t); // 21
alert(count); //count=41
var z=fiba (8);
alert(z); // 21
alert(count2); //count2=13
var m = fib3(8);
alert(m); // 21
alert(count3); //count3=6
}
위의 사례 를 통 해 알 수 있 듯 이 전달 법의 효율 이 가장 높 고 그 다음은 폐쇄 이 며 재 귀 법의 효율 이 가장 낮다.패 킷 효율 은 상대 적 으로 재 귀 법 이 높 지만 이런 방법 을 잘못 사용 하면 메모리 유출 이 발생 할 수 있 습 니 다. 만약 에 우리 가 큰 Fibonacci 수 를 요구 하면 arr 배열 이 차지 하 는 공간 이 점점 커지 고 시스템 은 계속 인용 되 어 메모리 유출 을 초래 할 수 있 습 니 다.따라서 폐쇄 를 사용 할 때 는 이 점 을 주의해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.