점화식과 재귀함수

점화식과 재귀함수

점화식 (Recurrence)

어떤 수열의 일반항을 그 이전의 항들을 이용하여 정의한 식
예시) 피보나치 수열
1, 1, 2, 3, 5, 8, 13, …
F1 = F2 = 1, Fn+2 = Fn+1 + Fn

재귀함수

어떤 함수가 자신을 다시 호출하여 작업을 수행하는 방식
반환타입 함수이름 (매개 변수) {
종료 조건

함수이름(…)
}

public class Practice5 {

    static int recursion1(int n) {
        if (n == 1) {
            return 1;
        }
        return 3 * recursion1(n - 1);
    }

    static int recursion2(int n) {
        if (n == 1) {
            return 1;
        }
        return n + recursion2(n - 1);
    }

    static int recursion3(int n) {
        if (n < 3) {
            return 1;
        }
        return recursion3(n - 2) + recursion3(n - 1);
    }

    public static void main(String[] args) {
        //점화식 -> 반복문, 재귀함수
        System.out.println("== 점화식/재귀함수 연습1 ==");
        //1, 3, 9, 27, . . . 의 n번째 수
        int n = 4;
        int result = 1;
        for (int i = 0; i < n; i++) {
            if (i == 0) {
                result = 1;
            } else {
                result *= 3;
            }
        }
        System.out.println(result);


        System.out.println("== 점화식/재귀함수 연습2 ==");
        //1, 2, 3, 4, 5, 6, . . . 의 n번째 까지의 합
        n = 5;
        result = 0;
        for (int i = 1; i < n + 1; i++) {
            result += i;
        }
        System.out.println(result);

        System.out.println("== 점화식/재귀함수 연습3 ==");
        //1, 1, 2, 3, 5, 8, 13, . . .의 n번 째 수
        n = 6;
        result = 0;
        int a1 = 1;
        int a2 = 1;

        if (n < 3) {
            result = 1;
        } else {
            for (int i = 2; i < n; i++) {
                result = a1 + a2;
                a1 = a2;
                a2 = result;
            }
        }
        System.out.println(result);
    }
}
== 점화식/재귀함수 연습1 ==
27
== 점화식/재귀함수 연습2 ==
15
== 점화식/재귀함수 연습3 ==
8
public class Practice5_1 {

    static  int factorial(int n){
        if(n == 1){
            return 1;
        }
        return n * factorial(n-1);
    }

    public static void main(String[] args) {
    //Test Code
        System.out.println(factorial(1));
        System.out.println(factorial(2));
        System.out.println(factorial(3));
        System.out.println(factorial(4));
        System.out.println(factorial(5));
    }
}
1
2
6
24
120
//최대공약수를 재귀함수를 구현하시오.
public class Practice5_2 {
    static int gcd(int a, int b) {
        if (a % b == 0) {
            return b;
        }
        return gcd(b, a % b);
    }


    public static void main(String[] args) {
        //Test Code
        System.out.println(gcd(3, 5));
        System.out.println(gcd(2, 6));
        System.out.println(gcd(8, 12));
    }
}
1
2
4

출처 : 제로베이스

Leave a comment