본문 바로가기

플밍 is 뭔들/알고리즘

순환(RECURSION)의 개념과 기본 예제3

※ 순환 알고리즘 설계(Design Recursion)
  1. 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 된다.
  2. 모든 case는 결국 base case로 수령되어야 함.
  3. 암시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꿔라

     - 암시적 변수와 명시적 변수?
     
     **일반적인 반복문을 이용해서 배열탐색을 할때 아래와 같은 방식으로 구현을 한다.
         여기서 명시적 변수는 n,data,target이 되고 암시적 변수는 i가 된다.(변수 선언이 되어있지 않다.)
       public static int search(int n, int [] data, int target){
              for(int i=0;i<n;i++){
                     if(data[i]==target){
                           return i;
                     }
              }
              
              return -1;
       }
         
         일반적인 상황에선 매개변수가 많아서 좋을건 없지만 Recursion에서는 이러한 암시적 변수들을 명시적 변수로
         변환해 주는게 좋다. (위와 같은 배열탐색 기능을 Recursion으로 구현한 소스)
         맨처음 호출할 때 뿐만 아니라 지속적으로 자신을 계속 호출할 때 까지 생각해야 되기 때문이다.
         (위의 소스는 시작값이 0에서 바뀌지 않지만 아래 함수에서는 시작값이 변한다.) 
     public static int search(int begin, int end, int [] data, int target){
              if(begin>end){
                     return -1;
              }else if(target==data[begin]){
                     return begin;
              }else{
                     return search(begin+1, end, data, target);
              }
       }