2018-6-15 Recursion (2)

Recursion2

  • for문을 이용하지 않고, Recursion을 이용해서 풀 수 있는 방법이 많다.
// 문자열의 길이구하기
public class Recursion5 {
    public static void main(String[] args) {
        int result = length("hello world");
        System.out.println("result : " + result);
    }

    public static int length(String str) {
        if (str.equals(""))
            return 0;
        return 1 + length(str.substring(1));
    }
}
//result
11

// 문자열 프린트
public class Recursion6 {
    public static void main(String[] args) {
        String str = "hello world";
        printChars(str);
    }

    public static void printChars(String str) {
        if (str.length() == 0)
            return;
        System.out.print(str.charAt(0));
        printChars(str.substring(1));
    }
}
//result
hello world
//배열의 합
public class Recursion7 {
    public static void main(String[] args) {
        int [] data = {1, 3, 4, 5,6};
        int result = sum(5, data);
        System.out.println("result is " + result);
    }

    public static int sum(int n, int [] data) {
        if (n <= 0)
            return 0;
        return sum(n - 1, data) + data[n - 1];
    }
}
//result
19

Recursion vs Iteration

  • 모든 순환함수는 반복문(Iteration)으로 변경가능하다.
  • 그 역도 성립, 즉 모든 반복문은 Recursion으로 표현이 가능하다.
  • 순환함수는 복잡한 알고리즘을 단순하게 표현하게 해준다. 하지만 함수 호출에 따른 오버해드가 있다(매개변수 전달)
Written on June 15, 2018