Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Nnnnnnnnn

Recursion 본문

Algorithm

Recursion

와이제인 2019. 5. 20. 14:01

Recursion

 

자기 자신을 호출하는 함수.  순환, 재귀

recursion 항상 무한루프에 빠지는 것이아니다.

 

 

무한루프에 빠지지 않는 적절한 구조

 

Base case :  적어도 하나의 recursion 빠지지 않는 경우가 존재해야 한다.

Recursive case : recursion 반복하다보면 결국 base case 수렴해야 한다.

 

 

수학적귀납법과의 비교

 

Ex)

  1. n=0 경우 0 반환한다.
  2. 임의의 양의 정수 k 대해서 n<k 경우 0에서 n까지의 합을 올바르게 계산하여 반환한다고 가정하자.
  3. n=k 경우, func 먼저 func(k-1) 호출하는데 2번의 가정에 의해서 0에서 k-1까지의 합이 올바로 계산되어 반환된다. 메소드드 func 값에 n 더해서 반환한다. 따라서 메서드 func 0에서 k까지의 합을 올바로 계산하여 반환한다.

n!, x^n, finonacci number(f0=0, f1=1, fn = fn-1 + fn-2, n>1), 최대공약수(Euclid Method)

 

public static int gcd(int p, int q){

     if(q==0)

        return p;

     else

       return gcd(q, p%q);

}

 

 

Recursive Thinking

 

문자열의 길이 계산

 

public static int length(String str){

    if(str.equals(“”))

        return 0;

    else

        return 1+length(str.substring(1));

}

 

 

배열의 합구하기

 

public static int sum(int n, int[] data){

     if(n<=0)

        return 0;

     else

        return sum(n-1, data) + data[n-1];

}

 

 

모든 순환함수는 반복문(iteration) 으로 변경 가능

역도 성립함. 모든 반복문은 recursion으로 표현 가능함.

순환함수는 복잡한 알고리즘을 단순하고 알기쉽게 표현하는 것을 가능하게

하지만 함수 호출에 따른 오버헤드가 있음(매개변수 전달, 액티베이션 프레임 생성 )

 

 

순환적 알고리즘 설계

 

암시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꾸어라.

예를 들어 순차탐색 , 매개변수에 begin end 표기. 그리고 return search(data, begin+1, end, target)

 

 

상태공간트리

 

상태공간트리란 찾는 해를 포함하는 트리.

해가 존재한다면 그것은 반드시 이 트리의 어떤 노드에 해당함

따라서 트리를 체계적으로 탐색하면 해를 구할 있음

상태공간 트리의 모든 노드를 탐색해야 하는 것은 아님.

 

 

 Powerset 

 멱집합

 

 

 

 

'Algorithm' 카테고리의 다른 글

시간복잡도  (0) 2018.03.27
알고리즘 주의할 점  (0) 2018.03.27
cin과 scanf 속도  (0) 2017.12.30
비트마스크 - 2  (0) 2017.12.30
비트마스크 - 1  (0) 2017.12.30