today's alogrithm

[BOJ] 재귀 단계 - JAVA

UR'im 2021. 1. 24. 23:37

오늘은 앞서 인프런에서 제공한 알고리즘 강의의 첫 섹션인 재귀 부분의 강의를 듣고 문제를 풀어 보았다.

▷ 팩토리얼

www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        Main m = new Main();
        
        System.out.println(m.factorial(N));
    }
    
    public int factorial(int n){
        if(n <= 0){
            return 1;
        }else{
            return n*factorial(n-1);
        }
    }
}

팩토리얼의 경우 틀린것 없이 한번에 통과했다. 확실히 강의를 들은 효과가 있는것 같다.

▷ 피보나치 수 5

www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

피보나치의 경우 두번 틀렸는데 

첫번째 문제는 if 분기의 조건문이 틀렸다.

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        Main m = new Main();
        System.out.println(m.fibonacci(N));
    }
    
    public int fibonacci(int n){
        if(n < 1){
            return 1;
        }else{
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }
}

 

두번째로는 분기 내부의 리턴값이 틀렸다. 1을 리턴하면 결국 1들만 합하게 된다.

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        Main m = new Main();
        System.out.println(m.fibonacci(N));
    }
    
    public int fibonacci(int n){
        if(n < 2){
            return 1;
        }else{
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }
}

 

최종 결과이다. 이번 기회를 통해 재귀 함수 구조 파악을 제대로 해야겠다.

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        Main m = new Main();
        System.out.println(m.fibonacci(N));
    }
    
    public int fibonacci(int n){
        if(n < 2){
            return n;
        }else{
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }
}

 

오늘은 주말이고,, 늦었으니 20000..

'today's alogrithm' 카테고리의 다른 글

[BOJ] 정렬 단계 - JAVA  (0) 2021.01.31
[프로그래머스] SQL고득점 Kit - oracle sql  (0) 2021.01.26
[Programmers] SQL kit - Oracle  (0) 2021.01.23
[BOJ] 기본수학 2 - JAVA  (0) 2021.01.21
코딩 테스트의 준비  (0) 2021.01.19