>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 피보나치 시퀀스 생성기

JavaScript 재미있는 질문: 피보나치 시퀀스 생성기

黄舟
黄舟원래의
2017-01-22 14:54:311663검색

함수를 반환할 수 있는 함수 생성기 genfib()를 만듭니다. 이 함수가 실행될 때마다 피보나치 수열의 다음 항목이 처음 실행될 때 첫 번째 항목이 반환됩니다.

예제는 다음과 같습니다.

var fib = genfib();  
fib(); // -> returns 0  
fib(); // -> returns 1  
fib(); // -> returns 1  
fib(); // -> returns 2

이 질문을 받았을 때 가장 먼저 생각한 것은 genfib()에서 함수를 반환하기 때문에 소란을 피우는 것이었습니다. 그래서 먼저 클로저를 반환합니다. 그 안에 무엇이 들어있든 간에 함수 안에 있습니다.

그런 다음 질문의 의미에 따라 피보나치 수열의 N번째 항을 찾기 위해 genfib()에 내부 함수를 정의합니다. 여기서는 분할 정복 재귀를 사용합니다.

그렇다면 클로저 함수와 이 프라이빗 함수를 결합하여 실행될 때마다 다음 피보나치 수열을 반환하는 효과를 얻으려면 어떻게 해야 할까요?

0을 가리키기 시작하는 내부 포인터 변수 포인트를 사용할 수 있습니다. 클로저 함수가 호출될 때마다 프라이빗 함수를 실행하고 포인터 변수를 매개변수로 전달하고 현재의 피보나치를 반환합니다. 항목 번호를 입력한 다음 포인터 변수가 증가합니다.

이렇게 하면 목표가 달성됩니다.

function genfib(){  
    var point = 0;  
      
    var getFib = function(num){  
        if(num == 0){  
            return 0;  
        }  
        if(num == 1){  
            return 1;  
        }  
        return getFib(num-1) + getFib(num-2);  
    };  
      
    return function fib(){  
        return getFib(point++);  
    }  
}

위 내용은 JavaScript Fun Question: Fibonacci Sequence Generator 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.