Eloquent Javascript では、指定された目標値に到達するために加算と乗算のシーケンスを生成する関数を作成するという困難な問題が発生します。 。提供されたコードは再帰を使用しているため、その動作について疑問が生じます。
findSequence 関数内には、ネストされた関数 find があります。この関数は、現在の数値から 2 つの可能な変換 (5 を加算するか、3 を乗算する) を再帰的に調べます。各変換は新しい数値を生成し、目標が達成されるか、現在の数値が目標を超えるまでプロセスが継続されます。
各ステップで、式のテキスト表現が渡されます。たとえば、数値 1 から始まる場合、初期式は「1」になります。 5 を加算することを選択した場合、式は「(1 5)」になります。これらの式を記録することにより、関数は各数値に到達するまでに実行されたステップを追跡します。
目標に到達した場合、最後のステップの式は有効なシーケンスを表します。それ以外の場合、関数は失敗を示す null を返します。複数の再帰呼び出しが行われ、有効なシーケンスが見つかるかすべてのパスが使い果たされるまで、それぞれが異なるパスを探索します。
再帰を説明するために、目標番号 14 のシーケンスを見つけることを考えてみましょう。
(1, "1") (5, "1 + 5") (10, "(1 + 5) + 5") (15, "((1 + 5) + 5) + 5") // Discard, exceeds goal (30, "((1 + 5) + 5) * 3") // Discard, exceeds goal (15, "(1 + 5) * 3") // Discard, exceeds goal (3, "1 * 3") (8, "(1 * 3) + 5") (13, "((1 * 3) + 5) + 5") (18, "(((1 * 3) + 5) + 5) + 5") // Discard, exceeds goal (39, "(((1 * 3) + 5) + 5) * 3") // Discard, exceeds goal (24, "((1 * 3) + 5) * 3") // Discard, exceeds goal (9, "(1 * 3) * 3") (14, "((1 * 3) * 3) + 5") // Success!
この段階的な再帰プロセスを通じて、関数は最終的にシーケンス「((1 3) 3) 5」を見つけます。これは、1 と 3 の 3 乗の積に 5 を加算することを表します。 .
以上が「FindSequence」関数で再帰はどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。