再帰アルゴリズムのイラスト

図1:

 

 図2:

 

 

 

図IおよびIIの比較は、彼らの役割は同じです。流れの分析、比較的複雑な図の流れから、単純な図1,2ながら

対応することによるものである備考上記のStackOverflow:ループを使用している場合、プログラムの性能が高くてもよい、再帰を使用している場合、プログラムが容易であり得ます死の理解。方法を選択することは、今あなたにとって重要であるかに依存します。

だから、再帰とサイクル間の違いは何ですか?
相違点:
再帰が制御されていない場合、関数本体は、自分自身を呼び出すで、スタックオーバーフローまで無限の通話そのもの。
ループが繰り返し一定の期間のコード領域に実行される、制御されない場合、エンドレスループを形成します。

同じポイント:
かどうか再帰サイクル、我々は特定の条件を設定しなければならない、または再帰ループを終了します。

 

再帰的なベースライン条件と条件

再帰関数を書くとき、あなたは、いつ再帰的に停止するよう指示しなければなりません。基部と再帰条件:このため、各再帰関数は、その2つの部分を有しています。
条件再帰関数を指すが自分自身を呼び出して、ベースライン条件は、もはや機能を指すされていない、それによって無線ループの形成を回避し、自分自身を呼び出します。

次のようにコード例は以下のとおりです。

パッケージcn.recursive.example。

パブリック クラスRecursiveExample {
    
    
      / * *
       *再帰的な方法
       * @Param X
       * @return
       * / 
       パブリック 静的 INT F(int型X){
           
           もし(Xの== 0 ){
               
               リターン 0 ;
           }
           
           戻り 2 *のF(X - 1)+ X * Xと、
       }
       
       
      

      
       パブリック 静的 ボイドメイン(文字列[]引数){
           
    
         // 場合、X = 2、メソッドを呼び出して、出力される6。 
        システム。OUT .println(RecursiveExample.f(2 ))。
          
    
       }
}

0ベースライン条件コードに対応し、2リターン戻りF(1-X)+ X Xは、再帰的な条件に相当します。

スタック

スタックは、我々はそれを使用されるデータ構造であり、そして私たちも知りません。

 

それはスタックでなく、支払うべき代償を使用すると便利ですが:
詳細な情報を格納するメモリの多くを取ることができます。各関数呼び出しは、スタックが高い場合、それはコンピュータが関数呼び出しの大量の情報を保存することを意味し、特定のメモリを占有しなければなりません。この場合には、通常次の2つのオプション:
(1)の代わりに、環状を使用して、コードを再書き込み;
(2)末尾再帰。これは高度な再発のテーマです。また、必ずしもすべての言語は、末尾再帰をサポートしています。

私の気持ちは:
私は擬似コードと鮮明な画像を大量に使用することがあるため、実際には、この章では、再帰的なアルゴリズムの最大の気持ちを示したので、私はコードが本当に鮮やかなダイナミックな男だと思います。また、私はその後、検証ロジックの擬似コードで作業を開始し、特にあなたが擬似コードの櫛ロジックを記述することができ、時間の関数を書くために、大きな助けのコードを整理するための擬似コードのアイデアを考える正しいです。

おすすめ

転載: www.cnblogs.com/youcong/p/10925334.html