再帰と動的プログラミングの簡単な理解

1.再帰的定義

シンプルで、再帰が自身であるという概念を説明するために使用することができ、例えば、辞書には、説明の各単語を説明するために、他の辞書の単語に依存することです。一般に、コンピュータのほとんどで遭遇再帰の問題が小さいサブスケールの問題解決に問題を打破して、マージすることです。

再帰的な性質

再帰的な自然と一つの問題、それらのほとんどは、2つの特徴を持って、最初の状態遷移方程式は、このようなN-、階乗解決として漸化式は、あります!= N *(N-1) !、 N N-1は、階乗解決するために変換されるの階乗を解決します。第二の特徴は、再帰が問題のクラスを解決することであり、終了条件で、結果が存在しなければなら

ない再帰、あなたは答えを指示することができたときに、問題の大きさが十分に小さいときに終了条件が簡略化されています。階乗を解決するとき、問題が持っていたとき、彼が直接出力1でした。

    int f(n)
    {
       if(n==1)//终止条件
         {
            return 1;
         }  
          else
           {
              return n*f(n-1);//递归方程
           }  
     }

再帰的な価格

再帰的に、再帰関数が繰り返し呼び出されたときに終了条件が到着した後、層ごとに、入力し、その後、層ごとうち、各レイヤの機能の結果、演算結果の精度や状態を確保するために保存しなければなりません割り当てられたシステム、大量のデータ、占有スペース再帰的に積層し、時間を実行して非常に怖いとなり、効率が非常に低くされ

、ここで動的計画アルゴリズムの実装に再導入再帰似ていますが、高効率化。

動的計画法の性質

この問題を解決するために、低オーバーヘッドの問題を解決するための再帰アルゴリズム、ダイナミックプログラミングアルゴリズムは、低上からであり、また、動的プログラミングアルゴリズムは繰り返し呼び出し自体を必要とせず、再帰的アルゴリズムの利点と比較して、状態遷移方程式方程式及び初期条件を必要とこの関数は、各レイヤ機能の状態を保存する必要があるので、それは時間と空間を取るあまりを費やす必要はありません。

階乗動的計画アルゴリズム

    int f(n)
     {
         int array[n+1],i;//array[i]表示i的阶乘
          array[1]=1;
           for(i=2;i<=n;i++)
               { 
                  array[n]=n*array[n-1];//状态转移方程
                }
            return array[n];
      }



このアルゴリズムに関係なく、時間の再帰的なアルゴリズムよりも優れた空間インチ しかし、いくつかの問題のために、再帰的なアルゴリズムより少ないコード、より良く理解する、そのようハノイの塔など、動的なプログラミングアルゴリズムによって解決場合は、時間がかかり、再帰アルゴリズムよりもはるかに少ないものの、だけでなく、難易度は、再帰的なアルゴリズムよりも大きくなる実感。
ビューの個人的なポイントは、我々は、論文を議論を歓迎

おすすめ

転載: www.cnblogs.com/liveformyself/p/11518864.html