오늘은 앞서 인프런에서 제공한 알고리즘 강의의 첫 섹션인 재귀 부분의 강의를 듣고 문제를 풀어 보았다.
▷ 팩토리얼
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
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 |