2018-6-17 Recursion (2)

Recursion

  • recursion을 무한루프 안빠지게 하기
public class Recursion1 {
    public static void main(String[] args) {
        int n = 4;
        func(n);
    }

    public static void func(int k) {
        if (k <= 0)
            return;
        else {
            System.out.println("hello...");
            func(k - 1);
        }

    }
}
//result
hello...
hello...
hello...
hello...

  • recursion은 항상 무한루프에 빠지지 않는다. recursion을 적절하게 사용을 하면 된다.

  • recursion이 빠져나갈 수 있는 조건문을 만들어 놓아야한다. 이것을 Base case라고 한다.
  • recursion을 반복을 하다보면 결국에는 base case로 수렴을 해야한다 :)
public class Recursion1 {
    public static void main(String[] args) {
        int result = func(4);
        System.out.println(result);
    }

    public static int func(int k) {
        if (k <= 0)
            return 0;
        else {
            return k + func(k - 1);
            // n이 0보다 크면 0에서 n까지의 합은 0에서 n -1까지의 합에 n을 더한것이다.
        }
    }
}
//result
10

// Factorial
public class Recursion2 {
    public static void main(String[] args) {
        int result = factorial(5);
        System.out.println(result);
    }

    public static int factorial(int n) {
        if (n == 0)
            return 1;
        return n * factorial(n - 1);
    }
}
//result
120
  • 0! : 1

피보나치

// Fibonacci
public class Recursion3 {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            System.out.println(fibonacci(i));
        }
    }

    public static int fibonacci(int n) {
        if (n < 2)
            return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

최대공약수

  • m >= n인 두 양의 정수 m과 n에 대해서 m이 n의 배수이면 gcd(m,n) = n이고, 그렇지 않으면 gcd(m,n) = gcd(n, m%n)이다.

Written on June 17, 2018