재귀 및 동적 프로그래밍의 간단한 이해

1. 재귀 적 정의

단순 재귀 자체가 개념을 설명하는 데 사용할 수 있습니다, 예를 들어, 사전, 설명의 각 단어를 설명하기 위해 다른 사전에있는 단어에 의존하는 것입니다. 일반적으로, 컴퓨터의 대부분에서 발생 재귀 문제가 더 작은 하위 규모의 문제 해결에 문제를 분해 한 다음 병합하는 것입니다.

재귀 적 성격

재귀 자연과 하나의 문제, 그들의 대부분은 두 가지 특성을 가지고, 제 1 상태 전이 방정식은 N-, 계승 해결 등의 재발 방정식입니다! = N * (N-1) !, N, N-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