알고리즘/알고리즘
재귀 함수 쉽게 이해하기 및 예시
2022. 3. 8. 10:00반응형
재귀 함수의 구조
int f() {
if (베이스 조건) {
return 베이스
}
else { // 베이스 조건이 아닐때,
[재귀식 연산에 대한 고려]
return 재귀식;
}
}
재귀함수 쉽게 이해하는 방법
1. 특정 리턴값을, 함수식으로 표현해본다
2. 그리고, 거기서, 베이스 조건과 재귀식을 도출한다.
(예) 피보나치 배열의 수학적 함수식 표현
f(x) = (x > 2일 경우) f(x-2) + f(x-1)
(x <= 2일 경우) f(x) = 1
베이스 조건과 재귀식 도출하기
f(x) = (x > 2일 경우) f(x-2) + f(x-1) <-- 재귀식
베이스조건 ---> (x <= 2일 경우) f(x) = 1 <---- 베이스
3. 1과 2를 이해한 것을 바탕으로, 위의 재귀 함수의 구조에 따라, 구현한다.
예제. (JAVA) 피보나치 배열 구하기
public static int fibonacci(int n) {
// 재귀함수는 반드시 베이스 조건을 명시해야한다.
// 입력값이 1이거나 2일때
if (n == 1 || n == 2) {
// 재귀함수는 베이스 조건에 대한, 가장 기초가되는
// 기초값(베이스)을 명시해야한다. 기초값은 여기서 1
return 1;
}
else {
// 재귀적으로 자기를 호출하여, n번째 피보나치 배열을 구한다.
// 재귀함수는 반드시 재귀식을 갖는다.
// 재귀식 f(n) = f(n-1) + f(n-2) (n!=1 이고, n!=2일때만)
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
public static void main(String[] args) throws IOException {
System.out.println(fibonacci(10));
}
결과화면
55
예시. (JAVA) 재귀함수로 문자열에서 특정 문자 변경하기.
import java.io.IOException;
import java.util.Scanner;
public class test {
public static String replaceAll(String s, char from, char to) {
if (s.length() < 1) {
return s;
}
else {
char first = (from == s.charAt(0)) ? to : s.charAt(0);
return first + replaceAll(s.substring(1), from, to);
}
}
public static void main(String[] args) throws IOException {
System.out.println(replaceAll("apple",'a','b'));
}
}
결과화면
baaple
예시. (JAVA) 특정 숫자 오름차순인지 확인하기
public static boolean checkAsc(int num) {
if (num < 0) num *= -1;
if (num < 10) {
// 탈출 조건
return true;
}
else {
//앞 뒤 비교하고 넘기고
return (((num / 10) % 10) <= (num % 10)) && checkAsc(num / 10);
}
}
public static void main(String[] args) {
System.out.println(checkAsc(12345));
System.out.println(checkAsc(-12345));
System.out.println(checkAsc(13579));
System.out.println(checkAsc(-53579));
System.out.println(checkAsc(13079));
}
결과화면
true
true
true
false
false
반응형
'알고리즘 > 알고리즘' 카테고리의 다른 글
[알고리즘] 병합정렬 (Merge sort) (0) | 2024.12.05 |
---|---|
[알고리즘] 기수정렬 (1) | 2023.12.26 |
[알고리즘] BFS/DFS 의사코드 (0) | 2022.11.27 |
[알고리즘] 자바 기본 입출력하기 (코딩테스트 전용, 코테전용) (0) | 2022.01.19 |