1. 再帰とは何ですか?関数が内部的に自分自身を呼び出すことができる場合、この関数は再帰的です。簡単に理解すると、関数は内部的に自分自身を呼び出し、この関数は再帰関数です。 以下のように表示されます。 関数fn(){ 関数fn(); } 関数fn(); この関数は再帰関数です。直接印刷すると、次のようになります。 印刷エラーが見つかりました。なぜでしょうか?再帰関数はループと同じ効果を持つためです。戻り値が与えられない場合は、無限ループが継続されます。つまり、次のことが分かります。 再帰はスタック 正しい再帰関数を書くにはどうすればいいですか?上記のコードを例に挙げます。たとえば、「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. フィボナッチ数列を見つけるフィボナッチ数列は「ウサギ数列」とも呼ばれ コードは次のとおりです。 関数fb(n){ n === 1 || n === 2 の場合{ 1 を返します。 } fb(n-1) + fb(n-2) を返します。 } console.log('3番目のフィボナッチ数の値は次のとおりです: '+fb(3)); console.log('10番目のフィボナッチ数の値は次のとおりです: '+fb(10)); 印刷結果は次のとおりです。 3. 再帰を使用して対応するデータオブジェクトを見つける
次のようなオブジェクトがあります。 var 日付 = [{ id:1, 名前:「電気製品」、 品:[{ id: 11, gname:'携帯電話' },{ id: 12, gname: 'コンピュータ' }] },{ id:2, 名前:「衣類」, 品:[{ id : 21, gname:'パンツ' },{ id : 22, gname : 'コート' }] },{ id : 3, 名前: '食べ物' }]; ここで、 まず、次に示すように、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); 印刷された結果は次のとおりです。 以下もご興味があるかもしれません:
|
<<: KVM 仮想化のインストール、展開、管理のチュートリアル
>>: ウェブページ上でデスクトップ exe プログラムを呼び出す簡単な方法
JavaScriptで格納可能なセカンダリメニューを実装するための具体的なコードは参考までに。具体...
任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...
以下は、私のプロジェクトでこのプロパティを使用する方法の例です。 (1)激しく透明な浮遊コードをコピ...
仕事で、これまで一度も書いたことのないケースに遭遇しました。午後の半分をその作業に費やし、ついに書き...
導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...
Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...
1. INSERT INTO SELECT文ステートメントの形式は次のとおりです: Insert ...
コードは次のようになります。 <!DOCTYPE html> <html lang...
Vue画像拡大鏡コンポーネントパッケージに基づいて、参考までに具体的な内容は次のとおりです。画像拡大...
フロントエンドテストページコード: <テンプレート> <div> <i...
この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...
まず、接続プールを使用する理由と、接続プールによってどのような問題が解決できるかを理解する必要があり...
目次序文1. 現在のgccバージョン2. gccをインストールする3.gmpのインストール4.MPF...
目次1. 概要2. nginx.conf 1) 設定ファイルの場所2) ワーカープロセス3) イベン...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...