함수를 반환할 수 있는 함수 생성기 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)를 참고해주세요!