JavaScriptの再帰の詳細

JavaScriptの再帰の詳細

1. 再帰とは何ですか?

関数が内部的に自分自身を呼び出すことができる場合、この関数は再帰的です。簡単に理解すると、関数は内部的に自分自身を呼び出し、この関数は再帰関数です。

以下のように表示されます。

関数fn(){
 関数fn();
}
関数fn();

この関数は再帰関数です。直接印刷すると、次のようになります。

印刷エラーが見つかりました。なぜでしょうか?再帰関数はループと同じ効果を持つためです。戻り値が与えられない場合は、無限ループが継続されます。つまり、次のことが分かります。

再帰はスタックstack overflowエラーが発生しやすいため、終了条件のreturn追加する必要があります。

正しい再帰関数を書くにはどうすればいいですか?上記のコードを例に挙げます。たとえば、「hello」を 5 回印刷したい場合は、次のように記述します。

var 数値 = 1;
関数fn(){
            console.log('こんにちは');
            if(数値 == 5){
                戻る;
            }
            数値++;
            関数fn();
        }
        関数fn();

印刷結果は次のとおりです。

再帰とは何かがわかったので、再帰を使って問題を解決する方法を見てみましょう。

2. 再帰を使って数学の問題を解く

1. 1 * 2 * 3 * 4 …*nの階乗を求めます。

コードは次のとおりです。

 関数fn(n){
           (n == 1)の場合{
               1 を返します。
           }
           n*fn(n-1) を返します。
       }
       console.log('1-20の階乗は: '+fn(20));
       console.log('1-10の階乗は: '+fn(10));
       console.log('1-5の階乗は: '+fn(5));

印刷結果は次のとおりです。

2. フィボナッチ数列を見つける

フィボナッチ数列は「ウサギ数列」とも呼ばれ:、1、1、2、3、5、8、13、21、34、……,数列を指します。つまり、3 番目の項の値は前の 2 つの項の合計です。ユーザーは n を入力し、その位置の数字を取得します。

コードは次のとおりです。

関数fb(n){
            n === 1 || n === 2 の場合{
                1 を返します。
            }
            fb(n-1) + fb(n-2) を返します。
        }
       console.log('3番目のフィボナッチ数の値は次のとおりです: '+fb(3));
       console.log('10番目のフィボナッチ数の値は次のとおりです: '+fb(10));

印刷結果は次のとおりです。

3. 再帰を使用して対応するデータオブジェクトを見つける

idに応じて対応するデータオブジェクトを返す

次のようなオブジェクトがあります。

        var 日付 = [{
            id:1,
            名前:「電気製品」、
            品:[{
                id: 11,
                gname:'携帯電話'
            },{
                id: 12,
                gname: 'コンピュータ'
            }]
        },{
            id:2,
            名前:「衣類」,
            品:[{
                id : 21,
                gname:'パンツ'
            },{
                id : 22,
                gname : 'コート'
                }]
        },{
            id : 3,
            名前: '食べ物'
                }];

ここで、 idを入力して、対応するデータ オブジェクトを返す必要があります。

まず、次に示すように、for...Each() を使用して配列を走査し、各値を取得します。

関数 getId(配列,id){
                    配列.forEach(関数(値){
                        console.log(値);
                    })
                }
                取得ID(日付、1);

印刷された結果は次のとおりです。

このとき、ID 1 のオブジェクトの値を取得したい場合は、次のようにします。

関数 getId(配列,id){
                    配列.forEach(関数(値){
                       if(値.id === id){
                           console.log(値);
                       }
                    })
                }
                取得ID(日付,1);

印刷結果は次のとおりです。

はい、しかし、ID 11 のオブジェクトの値を取得したい場合はどうすればよいでしょうか。明らかに、関数を直接呼び出すことは実現可能ではありません。これは、for...Each を通じて最も外側のオブジェクトの値を取得するだけで、内側のレイヤーの特定の分類は取得されないためです。このとき、getId(array,id) 関数を再帰的に呼び出すことで、内側のオブジェクトの値を取得できます。

操作は以下のとおりです。

 関数 getId(配列,id){
                    配列.forEach(関数(値){
                       if(値.id === id){
                           console.log(値);
                       }それ以外の場合(value.goods && value.goods.length != 0){
                            getId(値.商品,ID);
                       }

                    })
                }
                // getId(日付,1);
                getId(日付、11);

印刷された結果は次のとおりです。

JavaScript再帰に関するこの記事はこれで終わりです。JavaScript 再帰に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 古典的なJavaScriptの再帰ケースの質問の詳細な分析
  • JavaScript 再帰関数の定義と使用例の分析
  • JavaScript 再帰関数の定義と使用例の分析
  • JavaScriptの再帰操作例の簡単な分析

<<:  KVM 仮想化のインストール、展開、管理のチュートリアル

>>:  ウェブページ上でデスクトップ exe プログラムを呼び出す簡単な方法

推薦する

ウェブページで CSS スタイルを適用するさまざまな形式の概要

1. インライン スタイル (<body></body> 内に配置されます)...

Centos7 構成 fastdfs および nginx 分散ファイル ストレージ システムの実装プロセス分析

1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...

JS で if 判定をスムーズに行う方法

目次序文コードの実装アイデア 1アイデア2要約する参照ドキュメント序文プロジェクト内の小さな要件ポイ...

vue 動的コンポーネント

目次1. コンポーネント2. キープアライブ2.1 問題点2.2 キープアライブを使って解決する2....

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

vue+element-uiはヘッドナビゲーションバーコンポーネントを実装します

この記事では、vue+element-uiでヘッドナビゲーションバーコンポーネントを実装するための具...

すべてのブラウザとの完全な互換性を実現するために最適なプリセットを選択してください

各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...

W3C チュートリアル (6): W3C CSS アクティビティ

スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。スタイル シートは...

柔軟で安定した高品質の HTML および CSS コード標準を作成するためのガイド

黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...

Linux環境変数ファイルの簡単な紹介

Linux システムでは、環境変数は適用範囲に応じて、システムレベルの環境変数とユーザーレベルの環境...

Vueは複数のカウントダウンを同時に設定する機能を実装しています

この記事の例では、複数のカウントダウンを同時に設定するためのVueの具体的なコードを参考までに共有し...

JavaScript イベント委任の原則

目次1. イベント委任とは何ですか? 2. イベント委任の原則3. イベント委託の役割1. イベント...

シンプルなページング効果を実現するjQuery+Ajax

この記事では、ページング効果を実現するためのjquery+Ajaxの具体的なコードを参考までに紹介し...

vue.js パッケージ化プロジェクトの後の空白ページの解決策

Vueに触れたばかりのパートナーの多くは、開発環境ではVueプロジェクトは正常であるが、パッケージ化...

mysql8.0.12 でルートパスワードをリセットする方法

データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...