IT/Programming

재귀와 반복 (Recursion vs Iteration)

Jany 2009. 3. 23. 17:21
반응형

* 재귀 메소드

- 메소드는 특정한 문제를 해결하기 위해 다른 메소드를 호출할 수 있으며,

  자신을 직접 호출하는 것을 재귀라고 한다.

- 재귀적인 방법을 사용함에 있어 주의할 점은 종료하는 지점을 정의하는 것이다.

  그렇지 않으면 재귀는 무한 반복되기 때문이다.

 

* 재귀와 반복

- 재귀와 반복은 같은 문제를 해결하는 두가지 방법이지만, 재귀 방법이 적은 코드를 사용해 효율적으로 처리할 수 있다.

 

* 반복

- 메소드의 호출은 매개변수 리스트를 보관할 메모리 영역

  (메소드가 static이 아니라면) 메소드를 실행할 수 있는 복사 공간이 필요하다. 

- 반복적인 메소드 호출을 위한 메모리는 한번만 필요하기 때문에 반복 프로그래밍이 성능적인 면에서 유리하다.

 

* 재귀

- 세련된 방법. 코드를 이해하고 유지하는 것이 더 중요하다면 재귀 프로그래밍을 고려한다.

- 메소드가 자신을 호출할 때에 메모리를 위한 비용과 CPU 사용 시간이 더 많이 소요된다.

 

* 예

팩토리얼 : 1부터 해당 숫자까지의 모든 숫자를 곱한 것.

// 반복적인 방법

public class FactorialIterative {

     public static void main (String[] args) {

          System.out.println ("5 factorial = " + factorial (5));

     }

 

     public static int factorial (int n) {

          int result = n;

          for (int i = n-1; i > 0; i--) { // 조건과 증가문을 위한 변수가 필요하다.

               result *= i;

          }

          return result;

     }

}

 

// 재귀적인 방법

public class FactorialRecursive {

     public static void main (String[] args) {

          System.out.println("5 factorial = " + factorial (5));

     }

 

     public static int factorial (int n) {

          if (n == 1) return 1;

          return n * factorial (n-1);

     }

}

 

반응형