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 プログラムを呼び出す簡単な方法
MySQL ifnull のネストされた使用ifnull をネストする方法があるかどうかオンラインで...
execute、executeUpdate、executeQuery の違い (およびそれらの戻り値...
前回の記事では、MySQL データ保存手順パラメータの詳細な例を紹介しました。今日は、JSON デー...
最近、プロジェクトを進める過程で、ページの階層構造を描画するために iframe を頻繁に使用する必...
目次JS はファイルを読み取る FileReader書類イベントとメソッド基本的な使い方イベント処理...
Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...
では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...
<br />セマンティクス化は一言で説明することはできないし、まだ公式かつ厳密な定義もあ...
[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...
目次SQLを理解するSELECTを理解するエイリアス定数をクエリし、固定定数列を追加します。重複行を...
この記事の例では、ポップアップ効果を実現するためのjsの具体的なコードを参考までに共有しています。具...
ウェブページ上の画像が一般的に jpg、gif、png 形式であることは誰もが知っています。それらの...
1. ユーザーとグループを追加する1. mysqlユーザーグループを追加する # グループ追加mys...
タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...
今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...