国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
コンテンツ:
再帰とは何ですか?
デジタル再帰
チャレンジ
尾の再帰
要約します

JavaScriptによる再帰を理解する

Mar 17, 2025 am 09:11 AM

JavaScriptによる再帰を理解する

いくつかの問題は再帰に適しています。たとえば、フィボナッチシーケンスなどのシーケンスには再帰的な定義があります。シーケンス內(nèi)の各數(shù)値は、シーケンス內(nèi)の最初の2つの數(shù)値の合計です。ツリーデータ構(gòu)造で構(gòu)築または移動する必要がある問題も、再帰によって解決することができます。再帰的に考えるために自分自身を訓(xùn)練することは、そのような問題を解決するための強力なスキルをあなたに與えます。

このチュートリアルでは、いくつかの再帰関數(shù)がどのように機能するかを段階的に説明し、再帰関數(shù)を體系的に定義するためのいくつかの手法を示します。

コンテンツ:

  • 再帰とは何ですか?
  • デジタル再帰
  • 再帰をリストします
  • リストを作成します
  • 尾の再帰
  • 要約します

再帰とは何ですか?

再帰的に定義された関數(shù)は、単純化されたバージョン自體によって定義される関數(shù)です。ここに簡略化された例があります:

関數(shù)doa(n){
    // ...
    if(n> 0){
        DOA(N-1);
    }
}

再帰の仕組みを概念的に理解するために、コードに依存しない例を調(diào)べます。會社からの電話に応答する責(zé)任があるとします。これは忙しい會社なので、あなたの電話は複數(shù)の電話回線を持っているので、複數(shù)の電話を同時に処理できます。各電話回線には攜帯電話にボタンがあり、著信が発生すると點滅します。今日、仕事に行って電話をオンにすると、4行が同時に點滅します。したがって、すべての呼び出しに応答し始めます。

あなたは最初の行を拾って、「待ってください」と言います。次に、3行目をピックアップして、スタンバイなどに置きます。最後に、各コールが終了したら、前の発信者に戻り、その呼び出しを完了して電話を切ります。

この例の各呼び出しは、関數(shù)の再帰呼び出しに似ています。通話を受けると、コールスタックに(コード內(nèi))に配置されます。すぐに通話を完了できない場合は、スタンバイをします。関數(shù)呼び出しがすぐに計算できない場合、コールスタックに殘ります。通話に答えることができれば、それは拾われます。コードが関數(shù)呼び出しを計算できるようになると、スタックから飛び出します。次のコードの例を見るときは、この比phorを覚えておいてください。

デジタル再帰

すべての再帰関數(shù)には、終了できるように基本的なケースが必要です。ただし、機能にベースケースを追加するだけでは、無限に実行されないようにしません。この関數(shù)には、基本的な狀況に近づくためのステップが必要です。これが再帰的なステップです。再帰ステップでは、問題は問題の小さなバージョンに縮小されます。

nから始まるすべての數(shù)値を掛ける関數(shù)があるとします。これは因子関數(shù)と呼ばれ、nが1に等しい場合は4!として記述します。

各ステップでは、現(xiàn)在の數(shù)値から1を差し引きます。再帰的な狀況は何ですか?再帰的なケースは関數(shù)の事実です(4)。

  1. 4は1に等しいですか?いいえ。事実を置く(3)。
  2. 3は1に等しいですか?いいえ。事実を置く(2)。
  3. 2は1に等しいですか?いいえ。事実を置く(1)。
  4. 1は1に等しいですか?はい。事実(2)を返し、2を返します。
  5. 取得3 * fact(2)はfact(4)であり、24を返します。

関數(shù)が各呼び出しを処理する方法を確認する別の方法を次に示します。

 <code>fact(4) 4 * fact(3) 4 * ( 3 * fact(2) ) 4 * ( 3 * ( 2 * fact(1) )) 4 * ( 3 * ( 2 * 1 ) ) 4 * ( 3 * 2 ) 4 * 6 24</code>

再帰的な場合、パラメーターが変更され、基本的なケースに近づく必要があります。このパラメーターは、基本的な場合にテストする必要があります。前の例では、再帰ケースで1を減算するため、基本的な場合には、パラメーターが0に等しいかどうかをテストします。

チャレンジ

  1. 再帰的ではなくループを使用して合計関數(shù)を?qū)g裝します。
  2. 2つの數(shù)値を再帰的に乗算する関數(shù)を作成します。たとえば、0;
  3. フィルター機能を簡素化して、リストからすべてのアイテムを削除します。たとえば、["a"、 "b"、 "d"]。

尾の再帰

テールの再帰は、コンパイラがテールコールオプティメーション(TCO)を?qū)g行して、通常の再帰の多くのパフォーマンス欠陥を防ぐことを可能にする再帰の一種です。さらに、テールの再帰は、関數(shù)呼び出しの最大深度の問題を解決します。ただし、機能を機能させるには、何らかの形で機能を記述する必要があります。

尾の再帰は、関數(shù)の終わりに再帰関數(shù)を呼び出す関數(shù)に適しています。たとえば、ここでは、sum()関數(shù)のテール再帰バージョンです。Sum()の返品値全體が戻り値全體であるため、ランタイムは外部関數(shù)を安全に破棄し、內(nèi)部関數(shù)の結(jié)果のみを返すことができます。しかし、多くの人がこのようなことを旅します:

 function nottailRecursive(n){
    // ...
    NotTailRecursive(n)1を返します
}

再帰関數(shù)は最後に呼び出されるため、これは尾の再帰を使用すると思うかもしれません。しかし、そうではありません。これは、JavaScriptが外部関數(shù)に戻って1を追加する必要があるためです。あなたがそれを書き直す方法の1つは、 1引數(shù)に渡すことです。そうすれば、內(nèi)部関數(shù)がその計算を行うことができます。

現(xiàn)在、すべてのブラウザがテールコールの最適化をサポートしているわけではありませんが、それはES標(biāo)準(zhǔn)であるため、將來的にはより多くのサポートが見られる可能性があります。さらに、通常は関數(shù)パラメーターへの変化を分離するため、通常は良い実踐です。

チャレンジ

この記事の例の再帰関數(shù)を尾の再帰関數(shù)に再構(gòu)築します。

要約します

再帰関數(shù)には3つの部分があります。 1つ目は、終了條件である基本的な狀況です。 2つ目は、基本的な狀況に近づくステップです。 3番目は再帰ステップで、関數(shù)は単純化された入力でそれ自體を呼び出します。

再帰は反復(fù)のようなものです。再帰的に定義するか、ループを使用して定義できる機能。再帰を使用する際に考慮すべきその他のことには、再帰的なネストされたリストと最適化された再帰コールが含まれます。

再帰関數(shù)を尾の再帰関數(shù)にリファクタリングすることができます。これにより、パフォーマンスの利點が得られます。

再帰を?qū)Wぶための良いリソースは、本「The Little Schemer」です。 Q&A形式を使用して、再帰的に考える方法を教えます。

この投稿は、ジェイコブジャクソンの貢獻で更新されました。ジェイコブは、ウェブ開発者、ハイテクライター、フリーランサー、オープンソースの寄稿者です。

以上がJavaScriptによる再帰を理解するの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時間を操作する方法は? JSで日付と時間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時間を処理する場合は、次の點に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお勧めします。 2。時間情報を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお勧めします。これらの重要なポイントを習(xí)得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? Jun 26, 2025 am 12:54 AM

JavaScriptアプリケーションがゆっくりとロードされ、パフォーマンスが低い場合、問題はペイロードが大きすぎることです。ソリューションには、次のものが含まれます。1。コード分割(コードスプリッティング)を使用し、React.lazy()またはビルドツールを介して大きなバンドルを複數(shù)の小さなファイルに分割し、最初のダウンロードを減らすために必要に応じてロードします。 2。未使用のコード(Treeshaking)を削除し、ES6モジュールメカニズムを使用して「デッドコード」をクリアして、導(dǎo)入されたライブラリがこの機能をサポートしていることを確認します。 3.リソースファイルを圧縮してマージし、GZIP/BrotliとTerserがJSを圧縮できるようにし、ファイルを合理的にマージし、靜的リソースを最適化します。 4.頑丈な依存関係を交換し、day.jsやフェッチなどの軽量ライブラリを選択します

See all articles