再帰と末尾再帰 簡単に言えば、再帰とは関数が自分自身を呼び出すことです。プログラミング言語のアルゴリズムとして広く使用されています。中心となる考え方は、大規模で複雑な問題を段階的に元の問題に似たより小さな問題に変換して解決することです。一般的に、再帰には境界条件、再帰的な前進フェーズ、および再帰的な戻りフェーズが必要です。境界条件が満たされない場合は再帰が前進し、境界条件が満たされた場合は再帰が戻ります。 しかし、有能なプログラマーとして、再帰アルゴリズムは通常のループなどの一般的に使用されるアルゴリズムよりも効率が低いことも知っておく必要があります。したがって、より優れたアルゴリズムがない場合、または特定の状況で再帰の方が適切な場合を除き、再帰は可能な限り避けるべきです。再帰呼び出しプロセス中、システムはスタックを開いて、各レイヤーの戻りポイント、ローカル量などを保存します。再帰回数が多すぎると、スタック オーバーフローが簡単に発生する可能性があります。 このとき、末尾再帰を使用する必要があります。つまり、関数内のすべての再帰呼び出しは、関数の最後に表示されます。末尾再帰の場合、呼び出しレコードは 1 つしかないため、「スタック オーバーフロー」エラーは発生しません。
最大で n 個のコールスタックを保存する必要があり、その複雑さは O(n) です。末尾再帰を使用する場合:
この時点では、保存する必要がある呼び出しスタックは 1 つだけであり、複雑さは O(1) です。今回の事例を通じて、その本質が徐々に理解できたでしょうか?次に、再帰アプリケーションのよく使われる事例をいくつか紹介し、その後、この記事のタイトルで説明したツリーを実装していきます。 再帰の一般的な応用例 1. 配列の合計 指定された配列 arr について、arr 内のすべての項目の合計を計算します。
このメソッドは、配列パラメータと初期値(配列の最初の項目)を関数に渡し、反復処理を通じて配列の合計を実装します。 2. フィボナッチ数列 フィボナッチ数列は黄金比数列とも呼ばれ、1、1、2、3、5、8、13、21、34、... という数列を指します。数学では、フィボナッチ数列は次のように再帰的に定義されます。F(1)=1、F(2)=1、F(n)=F(n-1)+F(n-2)(n>=3、n∈N*)。フィボナッチ数列は、現代物理学、準結晶構造、化学などの分野に直接応用されています。次に、js を使用して n 番目のフィボナッチ数を見つけるメソッドを実装します。
末尾再帰最適化関数からは、関数自体が呼び出されるたびに更新された初期値と最終結果が渡され、バックトラックによって最終結果が得られることがわかります。 3. 階乗 階乗については上で説明しました。確認したい場合は、上にスクロールしてください。 4. 省と市のカスケード多階層連携 省市カスケード多階層リンク方式の本質は、構造化されたデータ構造を生成することです。elementやantdには対応する実装があるので、ここでは詳しく紹介しません。 5. ディープコピー ディープコピーの例は誰もがよく知っているので、ここでは単純な実装のアイデアを示します。
6. はしご問題 全部で n 段の階段があります。一度に上れるのは 1 段か 2 段だけです。この階段を上るには、何通りの方法があるでしょうか。
7. オブジェクトデータのフォーマット この質問は、私が Alibaba で面接を受けたときの筆記試験の質問でした。質問は、「サーバーがネストされたオブジェクトを返す場合、オブジェクトのキー名の大文字と小文字は不明です。キー名を小文字で統一するにはどうすればよいですか?」というものでした。
具体的なプロセスや考え方はコード内に注釈が付けられています。興味があれば、自分で勉強することもできます。 8. ディレクトリを走査/削除する ここではディレクトリを削除するために node を使用します。既存の node API にはディレクトリを削除する機能がありますが、ディレクトリ内にファイルやサブディレクトリがある場合、fs.rmdir && fs.rmdirSync ではそれらを削除できません。そのため、まずディレクトリ内のファイルを削除してから、フォルダを削除する必要があります。
9. フラクタルグラフィックを描く 再帰を使用すると、グラフィックスの自由度が高まりますが、これが最善の選択ではないことに注意してください。 いくつかのツールと再帰的な思考を使用することで、上記のフラクタル パターンを実現できます。 10. 配列のフラット化 配列のフラット化とは、次の例に示すように、ネストされた配列を単一の配列に拡張することを意味します。
もちろん、これは私が実装した方法の 1 つに過ぎず、他にも実装方法はたくさんあり、皆さんもぜひ試してみてください。 再帰を使用してカスタムスタイルの構造ツリーを描画する 上記の紹介を通じて、再帰とその応用の基本的な概念を皆さんは理解できたと思います。次に、再帰を使用して構造ツリーを描く方法を段階的に説明します。効果画像: この図は、ディレクトリ構造に基づいて生成されたディレクトリ ツリー図です。多くのアプリケーション シナリオで広く使用されています。次に、その実装プロセスを見てみましょう。
Test は、次のように構築したテスト ディレクトリです。 わずか 12 行のコードで構造ツリーを生成する小さなアプリケーションを実装しました。再帰は興味深いと思いませんか? この関数では、最初のパラメーターはディレクトリの絶対パスで、2 番目は識別子です。識別子によって、生成されたブランチのスタイルが決まります。さまざまなスタイルをカスタマイズできます。 |
>>: 時代遅れにならないで、機械学習プラットフォームこそが未来だ
DALL-E、Midjourney、Stable Diffusion などの AI 生成アート ツ...
ガートナーによると、AI は 2022 年までに世界中で 2.9 兆ドルのビジネス価値と 62 億時...
ラボガイド現在、公共の場や個人の応用場面に設置されている監視カメラの総数は1億7500万台を超えてい...
災害時において、通信は途切れることのできない生命線です。 [[412620]] 7月21日、河南省の...
論文: 物体検出のための特徴ピラミッドネットワーク論文アドレス: https://arxiv.org...
IT Homeは公安部の公式サイトから、公安部が8月10日に記者会見を開き、公安機関が国民の個人情報...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
5月下旬、トップの国際学術誌である米国科学アカデミー紀要(PNAS)は、昨年10月に査読が受理され...
[[416170]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
ビッグモデルはソフトウェア業界全体を変えるでしょう。その代表的な製品の一つがデジタルヒューマンです。...
[[406810]] [51CTO.com クイック翻訳]人工知能技術は企業が行うビジネスにとって...
2020年12月29日、2020年産業インターネットイノベーション大会(第4回)が盛大に開幕しました...