再帰とは何ですか?また、どのように機能しますか?まず再帰の定義を見てみましょう。
簡単に言えば、プログラムが自分自身を呼び出すプログラミング手法を再帰と呼びます。再帰の考え方は、大規模で複雑な問題を段階的に、元の問題よりも規模の小さい問題に変換することです。問題がサブ問題に分割された後、サブ問題がそれ以上の再帰なしで解決できるようになるまで、再帰呼び出しが続けられます。 再帰を使用する場合は、無限ループを回避する必要があります。再帰が正しく機能するようにするには、再帰プログラムに次の 2 つのプロパティを含める必要があります。
自分自身を呼び出す関数は再帰的です。終了条件を忘れないようにしてください。そうしないと、無限ループに陥ります。 1. 合計(1)デジタル加算関数 sum(n){ (n===1)の場合{ n=1を返す } n+sum(n-1)を返す } コンソールログ(合計(5)); 実行命令
(2)配列の和関数sum(arr) { var len = arr.length 長さが0の場合 0を返す } それ以外の場合 (長さ == 1) { 戻り値 arr[0] } それ以外 { arr[0] + sum(arr.slice(1)) を返す } } arr = [ 1, 2, 3, 4, 5 ] とします。 コンソールログ(合計(arr)) 実行命令
2. データ転送ツリーデータ = [{ id: "01", pid: "", "名前": "ラオ・ワン" }, { id: "02", pid: "01", "名前": "シャオ・チャン" } ] 関数 fn(data, rootId = '') { const children = [] //空の配列を定義する data.forEach(item => { if (item.pid === rootId) { //各アイテムのpid=rootIdが配列に追加された場合 children.push(item) item.children = fn(データ、item.id) } }); 子どもを返す } 次のステップに進む前に、出発点として再帰ツリー変換を使用してルート PID の値を確認します。 実行命令 3. ハノイの塔次の 3 つの列を a、b、c と設定します。a のすべてのプレートを大きいものから小さいものの順に c 列に配置することが目標です。一度に移動できるプレートは 1 つだけです。 実装のアイデア:
関数 fn(num, start, middle, end) { if(数値>0){ fn(数値-1,開始,終了,中間) console.log(開始+'====>'+終了); fn(数値-1,中間,開始,終了) } } 2 は 'a'、'b'、'c' です。 num をプレートの数とし、開始をプレート a、中間をプレート b、終了をプレート c とします。 例えば、2枚のプレートの実行順序 1. 最初の行に 2 を入れて、num>0 にします。最初の関数 fn(2-1,start,end,middle) を実行します。次に、fn(1-1,start,end,middle) を実行します。num が 0 より大きくないことを確認します。それだけでなく、fn(2-1,start,end,middle) に戻って console.log(a===>b) を出力します。 2. 2行目のconsole.log(start+'====>'+end);は直接a===>cを出力します。 3. 3行目のfn(2-1,middle,start,end)はconsole.log(b===>c)を実行し、次回fn(1-1,middle,start,end)はループに入ることができず、実行が完了します。 実行順序は少し抽象的です。本当に理解できない場合は、最も単純な考え方に従ってください。fn(num, start, middle, end)は、私たちが通常ゲームをプレイする方法です。最初の図 fn(num-1,start,middle,end) 2 番目のパラメータの位置を移動するプレートとして、4 番目のパラメータの位置を移動するターゲットとして取ります。画像を見るたびに、この数式を使用します。 ステップ 1 fn(num-1,start,end,middle) たとえば、プレートが 2 つある場合は、まず a-1 を b に配置する必要があります。 2番目のステップは、プレートaをcに配置し、console.log('a===>c')を直接出力することです。 3番目のステップは、プレートbをcに置くことです。fn(num-1,middle,start,end,) 4. フィボナッチ数列フィボナッチ数列は黄金比数列とも呼ばれ、数学者レオナルド・ダ・フィボナッチがウサギの繁殖を例に挙げて考案したため、「ウサギ数列」とも呼ばれています。0、1、1、2、3、5、8、13、21、34、 関数フィボナッチ(n) { n <= 1?1:フィボナッチ(n - 1) + フィボナッチ(n - 2) を返します。 } 最初の 2 つを除いて、毎回、前の数字と前の 2 つの数字の合計は 3 番目の数字と等しくなります。 たとえば、数字 5 の場合、最初の項は 3 です。最初の 2 つの項は 2 です。3+2=5 です。 要約する古典的な JavaScript 再帰ケースの質問の詳細な分析に関するこの記事はこれで終わりです。より関連性の高い JavaScript 再帰ケースのコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。皆様が今後も 123WORDPRESS.COM を応援してくれることを願っています。 以下もご興味があるかもしれません:
|
<<: Windows10 mysql 8.0.12 非インストール版 設定 起動方法
>>: Linux でファイルを実行するときに「そのようなファイルまたはディレクトリはありません」というプロンプトが表示される理由を深く理解する
この記事では、コンパイルとインストールから設定ファイルの説明まで、Nginx について詳しく紹介しま...
apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...
MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...
スプレッド演算子を使用すると、式をある時点で展開できます。スプレッド演算子は、複数のパラメーター (...
ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...
この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...
MySQL 5.0 は、いくつかの「高度な機能」があるため定番となっています。これは、Windows...
XHTML には似た機能を持つタグがいくつかあります。もちろん、ここでの類似性とは意味の類似性を指...
シナリオ 1: サーバーの制限により、外部に開かれているポートは 1 つだけですが、別の外部ネットワ...
1. スロークエリの用途は何ですか? long_query_time を超えて実行されるすべての S...
目次ステップ1: インストールステップ2: 引用ステップ3: 使用Webプロジェクトでは、データを読...
JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...
比較的シンプルな業務のプロジェクトもありますが、フロントエンドのページングを多用します。プラグインの...
序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...
目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...