1. 팩토리얼2(백준 27433번 문제)
27433번: 팩토리얼 2
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
▷ 풀이 코드
import java.util.Scanner;
public class Factorial_backjoon {
static long factorial(long n) {
if(n > 0) {
return n * factorial(n-1);
} else {
return 1;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
System.out.println(factorial(n));
}
}
2. 피보나치 수5(백준 10870번 문제)
https://www.acmicpc.net/problem/10870
10870번: 피보나치 수 5
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가
www.acmicpc.net
▷ 풀이 코드
import java.util.Scanner;
public class Fibonacci_backjoon2 {
static long fibonacci(long n) {
if(n > 1) return fibonacci(n-1) + fibonacci(n-2);
else if(n == 1) return 1;
else return 0;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
System.out.println(fibonacci(n));
}
}
3. 재귀의 귀재(백준 25501번 문제)
25501번: 재귀의 귀재
각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.
www.acmicpc.net
▷ 풀이 코드
import java.util.Scanner;
public class Palindrome_backjoon3 {
static int cnt;
static int palindrome(String a, int x, int y) {
cnt++;
if(x >= y) return 1;
else if(a.charAt(x) != a.charAt(y)) return 0;
else return palindrome(a, x+1, y-1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n; i++) {
String a = sc.next();
System.out.println(palindrome(a, 0, a.length()-1) + " " + cnt);
cnt = 0;
}
}
}
이번에는 알고리즘 스터디를 통해 재귀 함수에 대해서 공부했습니다!
재귀란 어떤 사건에 자기 자신을 포함하고나 자기 자신을 사용해 정의하는 것입니다.
사용하는 이유는 무한으로 루프를 돌려서 결과를 출력할 때 사용합니다.
간단한 예시로는 위에서 풀어보았던 팩토리얼, 피보나치수열 등이 있죠!
팩토리얼에서 곱셈을 덧셈으로 변경하면 해당 숫자까지의 합을 구할 수 있겠어요!!
간단한 예시를 하나 볼까요?
재귀의 사용방법 및 출력 순서는 아래와 같습니다.
import java.util.Scanner; public class Recur { static void recur(int n) { if(n > 0) { recur(n-1); System.out.println(n); recur(n-2); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("정수를 입력하세요 : "); int n = sc.nextInt(); recur(n); } }
코드를 순서대로 진행하면 아래와 같이 recur 함수 안에 recur 함수를 자꾸 파고들어가며 n이 0보다 큰 조건이 될때까지 반복합니다.
이렇게 찾으면서 실행되는 순서는 표기한대로 1→2→3→4→5→6→7의 순서로 진행됩니다.
출력 값은 1231421이 출력되며 재귀가 어떻게 진행되는지 알 수 있습니다!
재귀 방식도 마찬가지로 코딩테스트할 때 많이 사용된다고 하네요~
다양한 문제들을 많이 풀어봐야 익숙해질 것 같네요!
다음 스터디때는 재귀의 응용 방법에 대해서 배워볼게요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'문제풀기 > 알고리즘 스터디' 카테고리의 다른 글
[알고리즘] 정렬 문제 풀이(백준 2750번, 2751번, 10989번) (0) | 2023.06.07 |
---|---|
[알고리즘] 정렬 문제 풀이(백준 1181번, 1920번, 1427번) (0) | 2023.06.06 |
[알고리즘] 정렬 문제 풀이(백준 10817번, 11399번) (0) | 2023.06.05 |
[알고리즘] Queue 문제 풀이(백준 10773번, 10828번) (0) | 2023.05.07 |
[알고리즘] Stack 문제 풀이(백준 10773번, 10828번) (3) | 2023.05.04 |