ホームページ > ウェブフロントエンド > jsチュートリアル > 「FindSequence」関数で再帰はどのように動作しますか?

「FindSequence」関数で再帰はどのように動作しますか?

Susan Sarandon
リリース: 2024-10-18 07:55:03
オリジナル
615 人が閲覧しました

How Does Recursion Operate in the

「FindSequence」の再帰の詳細

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート