티스토리 뷰
부경대 IT융합응용공학과 권오흠 교수님의 영리한 프로그래밍을 위한 알고리즘 강좌와 '쉽게 배우는 알고리즘: 관계중심의 사고법 - 문병로'등을 통한 알고리즘 학습 강좌 링크
부경대 IT융합응용공학과 권오흠 교수님의 영리한 프로그래밍을 위한 알고리즘 강좌와 '쉽게 배우는 알고리즘: 관계중심의 사고법 - 문병로'등을 통한 알고리즘 학습 강좌 링크
2-2. 순환(Recursion)의 개념과 기본 예제 2
Recursive Thinking - 순환적으로 사고하기
Recursion은 수학함수 계산에만 유용한가?
수학함뿐 아니라 다른 많은 문제들을 recursion으로 해결할 수 있다.
문자열의 길이 계산
순서대로 앞에서 부터 하나씩 카운트 한다.
또는, 총 문자열의 길이는 첫번째 문자를 뺀, 전체 문자열의 길이 + 1(첫번째 문자)이다.(recursive thinking)
if the string is empty //base case
return 0;
else
return 1 plus the length of the string that excludes the first character;
public static int length(String str) {
if (str.equals(""))
return 0;
else
return 1 + length(str.substring(1));
}
substring의 정의
public String substring(int start)
Returns a new String
that contains a subsequence of characters currently contained in this character sequence. The substring begins at the specified index and extends to the end of this sequence.
Parameters:
start
- The beginning index, inclusive.Returns:
The new string.
Throws:
StringIndexOutOfBoundsException
- ifstart
is less than zero, or greater than the length of this object.
문자열의 프린트
public static void printChars(String str) {
if(str.length() == 0)
return;
else {
System.out.print(str.charAt(0));
printChars(str.substring(1));
}
}
문자열을 뒤집어 프린트
recursive하게 프린트 하려면
먼저 첫 문자를 뺀 나머지 문자열을 뒤집어 프린트 한 후
마지막으로 첫 문자를 프린트 한다.
public static void printCharsReverse(String str) {
if(str.length() == 0)
return;
else {
printCharsReverse(str.substring(1));
System.out.print(str.charAt(0));
}
}
2진수로 변환하여 출력
음이 아닌 정수 n을 이진수로 변환하여 인쇄한다.
n을 2로 나눈 몫을 먼저 2진수로 변환하여 인쇄한 후
n을 2로 나눈 나머지를 인쇄한다.
public void printInBinary(int n) {
if (n < 2)
System.out.print(n);
else {
printInBinary(n / 2);
System.out.print(n % 2)
}
}
배열의 합 구하기
data[0]에서 data[n-1]까지의 합을 구하여 반환한다.
public static int sum(int n, int[] data) {
int (n <= 0)
return 0;
else
return sum(n-1, data) + data[n - 1];
}
데이터파일로부터 n개의 정수 읽어오기
Scanner in이 참조하는 파일로부터 n개의 정수를 입력받아 배열 data의 data[0], ... , data[n-1]에 저장한다.
public void readFrom(int n, int[] data, Scanner in) {
if (n == 0)
return;
else {
readFrom(n-1, data, in);
data[n-1] = in.nextInt();
}
}
Recursive VS Iteration
모든 순환함수는 반복문(Iteration)으로 변경 가능
그 역도 성립함. 즉, 모든 반복문은 recursion으로 표현 가능함
순환함수는 복잡한 알고리즘을 단순하고 알기쉽게 표현하는 것을 가능하게 함
하지만 recursion은 함수 호출에 따른 오버헤드가 있음(매개변수 전달, 액티베이션 프레임 생성 등)
'ICT Eng > Algorithm' 카테고리의 다른 글
[Algorithm] 2-4. Recursion 응용 1 - 미로찾기 Java 구현 (0) | 2018.01.11 |
---|---|
[Algorithm] 2-3. 순환의 개념과 기본 3 - Designing Recursion (0) | 2018.01.09 |
[Algorithm] 2-1. 순환의 개념과 기본 1 - Recursion (0) | 2018.01.09 |
[Algorithm] 1. 알고리즘의 분석 (0) | 2018.01.09 |
[알고리즘] Knuth-Morris-pratt Algorithm, KMP 알고리즘 (0) | 2016.08.15 |
- Total
- Today
- Yesterday
- vuejs
- Raspberry Pi
- Vue.js
- ORM
- 라즈베리파이
- 정렬
- AWS
- IT융합인력양성사업단
- 레드블랙트리
- Spring Boot
- 한밭대학교
- Java
- 자바
- 스프링부트
- Spring
- springboot
- RBT
- vuex
- Recursion
- 무선통신소프트웨어연구실
- 순환
- JPA
- 한밭이글스
- Algorithm
- 시간복잡도
- 인프런
- 젠킨스
- 알고리즘
- github
- Wisoft
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |