ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の再帰関数の詳細な理解とサンプル コードの共有

JavaScript の再帰関数の詳細な理解とサンプル コードの共有

黄舟
黄舟オリジナル
2017-08-07 11:46:321140ブラウズ

以下のエディターは、JS 再帰関数に基づく詳細な理解と実践的な例を提供します (推奨)。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って、自分自身を呼び出すプログラムのプログラミング手法を再帰と呼びます。

プロセスまたは関数がその定義または記述内で直接的または間接的にそれ自体を呼び出すメソッド。通常、大規模で複雑な問題を元の問題と同様の小さな問題に変換し、再帰的戦略で説明できます。問題解決のプロセスに必要な複数回の繰り返し計算を少量のプログラムのみで行うことができるため、プログラムコードの量が大幅に削減されます。再帰の力は、有限のステートメントを使用してオブジェクトの無限のセットを定義することにあります。再帰的思考を使用して作成されたプログラムは、多くの場合、非常に簡潔で理解しやすいものになります。 一般に、再帰には境界条件、再帰的な前方セクションと再帰的な戻りセクションが必要です。境界条件が満たされない場合は再帰が進み、境界条件が満たされると再帰が戻ります。

注:

(1) 再帰はプロシージャまたは関数内でそれ自体を呼び出しています。(2) 増分再帰戦略を使用する場合、再帰終了と呼ばれる明確な再帰終了条件が必要です。無限に継続します (デッドロック)。

再帰アルゴリズムは、通常、次の 3 種類の問題を解決するために使用されます。

(1) データの定義は再帰的に定義されます。 (フィボナッチ関数)(2) 問題解決は再帰的アルゴリズムに従って実装されます。 (バックトラッキング)

(3) データの構造形式は再帰的に定義されます。 (ツリートラバーサル、グラフ検索)

再帰の欠点:

再帰アルゴリズムは問題解決の効率が低いです。再帰呼び出しプロセス中に、システムはスタックを開き、各層の戻り点、ローカル量などを保存します。再帰が多すぎると、スタック オーバーフローなどが簡単に発生する可能性があります。

再帰関数の興味深い例:

1. つがいのウサギがいます 生後 3 か月目から、毎月、つがいのウサギが生まれます。 . ウサギが死ななかった場合、3 年目の各月のウサギの総数は何匹になりますか? (ヒント: ウサギのパターンは 1,1,2,3,5,8,13,21.... という順序です。)

 class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   Console.WriteLine(p.tuzi(7));
  }
  public int tuzi(int n) 
  {
   if (n == 1 || n == 2)
   {
    return 1;
   }
   else 
   {
    return tuzi(n - 1) + tuzi(n - 2);
   }
  }
 }

2. 興味深い質問 - 年齢。 5人が一緒に座っていて、5人目の人は何歳ですかと尋ねます。 4人目より2歳年上だそうです。 4人目の人は何歳ですかと聞くと、3人目より2歳年上だと言いました。 3人目の方に聞いてみると、2人目より2歳年上だそうです。 2番目の人に尋ねると、彼は最初の人より2歳年上だと言いました。最後に最初の人に尋ねると、彼は10歳だと言いました。 5人目は何歳ですか?再帰的アルゴリズムを使用して実装されます。



class Program
 {
  static void Main(string[] args)
  {
   Program p = new Program();
   
   Console.WriteLine( p.age(5));
  }
  /// <summary>
  /// 递归法求岁数
  /// </summary>
  /// <param name="n">有几个人</param>
  /// <returns></returns>
  int age(int n)
  {
   int c;
   if(n==1)
    return 10;
  
   else
   {
    c = age(n-1)+2;
    return c;
   } 
  }

3. 興味深い質問 - 猿は桃を食べます。浜辺に桃の束があり、5匹の猿が桃を分けに来ます。最初の猿は山盛りの桃を5つに分け、もう1つあれば、余った1つを海に投げ込み、1つを持ち去りました。 2 番目の猿は残りの桃を 5 等分し、もう 1 つありました。3 番目、4 番目、5 番目の猿も同じようにしました。そこのビーチで?

コード:



class Program
 {
  static void Main(string[] args)
  {
   
   Program p = new Program();
   
   Console.WriteLine( p.PeachNumber(5));
   
  }
  /// <summary>
  /// 递归法求桃子数
  /// </summary>
  /// <param name="n"></param>
  /// <returns></returns>
  int PeachNumber(int n) 
  {
   if (n == 1)
   {
    //最后一个是至少是六个
    return 6;
   }
   else 
   {
    return (PeachNumber(n - 1) + 1) * 5;
   }
  }

以上がJavaScript の再帰関数の詳細な理解とサンプル コードの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。