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. 仮想マシン側1. MySQLの設定ファイルを見つける:sudo vim /etc/mysql/...
目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...
今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...
ステップ1: 現在のカーネルを表示する 読み取る $ uname -a Linux rew 4.15...
私の開発環境は、VMWare 仮想マシンに CentOS をインストールし、ホスト ファイルにインタ...
Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...
この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。...
<br />原文: http://blog.rexsong.com/?p=1166ウェブ...
目次1. コンストラクタとインスタンス化2. コンストラクターとインスタンス化の関係は何ですか? 3...
次の Web デザイン プロジェクトはレスポンシブにする必要があると上司をようやく納得させることがで...
more は、最もよく使用されるツールの 1 つです。最も一般的な使用方法は、出力コンテンツを表示し...
概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...
この記事では主に、HTML+CSS で階層化ピラミッドを実装する例を紹介し、皆さんと共有します。詳細...
現在の Linux システムが VMware にインストールされているかどうかを確認する方法を教えて...
H5 レイアウトを設計する場合、通常はバナーに遭遇することになります。例えば、2:1 で表示したい場...