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 プログラムを呼び出す簡単な方法
1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...
MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...
エディターは、Vue3のデータの関連する問題も共有します。次のような例を見てみましょう。 Vue.c...
質問: Alice 管理システムを開発しているときに、すべてのバックエンド インターフェイスが最初の...
目次1. はじめに2. RC および RR 分離レベル2.1. RRトランザクション分離レベルでのク...
オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...
目次VARCHAR 型と CHAR 型結論: VARCHAR 型と CHAR 型VARCHAR と ...
サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...
フォーム検証は、フロントエンド開発プロセスで最もよく使用される機能の 1 つです。私の個人的な仕事経...
背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...
目次成し遂げる:要約:言うことはあまりありませんが、まずは効果を見てみましょう。 カードホバー、レス...
Nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...
1. ユーザーとグループを追加する1. mysqlユーザーグループを追加する # グループ追加mys...
多くの場合、移行は避けられません。ハードウェアのアップグレード、データ センターの変更、古いオペレー...
Linux で Ctrl+c、Ctrl+d、Ctrl+z はどういう意味ですか? Ctrl+c と ...