총괄: 귀속 알고리즘의 일반적인 사고방식

1620 단어
**

역귀환 알고리즘


** 프로그램이 직접 또는 간접적으로 자신의 프로그래밍 기교를 호출하는 것을 귀속 알고리즘이라고 하고 직접 또는 간접적으로 자신의 함수를 호출하는 것을 귀속 함수라고 한다.그것은 통상적으로 하나의 대형 복잡한 문제를 층층이 원래의 문제와 비슷한 규모가 비교적 작은 문제로 바꾸어 해답을 구한다.
귀속 문제의 기본 사상: 문제 층층이 분석하는 관건: 귀속 정의와 귀속 종지 조건의 귀속 정의를 찾아낸다. 문제를 경계 조건으로 전환시키는 규칙의 귀속 종지 조건: 문제의 가장 간단한 상황을 묘사하고 그 자체는 귀속 정의를 사용하지 않는다.
예: 1~100의 귀속 fn(n)=n+fn(n-1) 종료 조건을 구합니다. fn(1)=1 코드:function fn(n){If(n<=1)Return1;Else returnn+fn(n-1);}
예: 최대 공인식 (유클리드 알고리즘) 귀속을 구합니다: gcd(m, n) = gcd(n, m%n) 종료 조건: gcd(m, 0) = m 코드: gcd(m, n)//m>n {If(n==0)return(m),elsereturn gcd(n, m m%n);

예제


폴란드 표현식의 역효과: (2+3) 4-> * + 2 3 4 예를 들어 * + 11 12 + 24 35 -> (24 + 35) (11 + 12) = 1357 atof 함수는char형을 부동점수atof()로 변환할 수 있다. (): 더블 atof(const char *str) 사고방식: 문자열 그룹에 입력하고 두 가지 상황으로 나눈다. 1, 기호, 2,숫자(문자열 수조에 입력할 때 빈칸이 있으면 멈춘다)char수조는 c[0]라는 위치만 있고 입력한 부동점수는 몇 개의 위치를 차지하고 귀속을 시작합니다. 첫 번째 상황, 기호라면 다음 귀속을 끌어냅니다. 두 번째 상황, 숫자라면 직접return난점: 한 번에 진 다음에 고려할 수 없고 입력을 하면서 계산해야 합니다.
#include
#include
#include
#include
using namespace std;
char a[20];
double f()
{
     cin>>a;
     switch(a[0])
     {
     case'+':return f()+f();
     case'-':return f()-f();
     case'*':return f()*f();
     case'/':return f()/f();
     default:return atof(a);
    }
}
int main()
{
   printf("%f
",f()); return 0; }

귀속 총결산은 귀속 호출을 통해 전체 문제를 층층이 처리 방법이 비슷한 하위 문제로 분해한다.회고를 통해 귀속 관계에 따라 서브문제의 해를 전체 문제의 해로 정리한다.서브문제를 분해할 때 현재 문제에 여러 가지 상황을 고려해야 한다면 하나하나 열거해야 한다.

좋은 웹페이지 즐겨찾기