関数を返すことができる関数ジェネレーター genfib() を作成します。この関数は実行されるたびに、フィボナッチ数列の次の項目を返します。最初の実行時には、最初の項目 0 が返されます。
例は次のとおりです:
var fib = genfib(); fib(); // -> returns 0 fib(); // -> returns 1 fib(); // -> returns 1 fib(); // -> returns 2
この質問を受け取ったとき、私の第一印象は、genfib() で大騒ぎするということでした。これは関数を返すため、何があるかに関係なく、最初にクロージャ関数をその中で返します。初期化。
次に、質問の意味に従って、フィボナッチ数列の N 番目の項を見つけるための内部関数を genfib() に定義します。ここでは分割統治再帰を使用します。
それでは、クロージャー関数とこのプライベート関数を組み合わせて、実行されるたびに次のフィボナッチ数列を返す効果を実現するにはどうすればよいでしょうか?
0 を指し始める内部ポインター変数 point を使用できます。クロージャ関数が呼び出されるたびに、プライベート関数を実行し、ポインター変数をパラメーターとして渡し、現在の項目のフィボナッチ数を返します。ポインタ 変数がインクリメントされます。
これで目標は達成されました。
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 中国語 Web サイト (www.php.cn) をご覧ください。