일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- bisection
- 개발순서
- 로지스틱 회귀
- graphical models
- 이것이 MySQL이다
- 인공지능
- vector미분
- chapter02
- chapter01
- 알고리즘대회
- 근구하기
- Numerical optimization
- 알고리즘
- SCPC
- 델타 rule
- MySQL
- 2018
- 5397번
- undirected graphical model
- 선형분류
- Fisher discriminant analysis
- Perceptron Convergence theorem
- 선형판별분석
- CH01
- falsePosition
- directed graphical model
- 1차예선
- 스터디
- secant
- 자바ORM표준JPA프로그래밍
- Today
- Total
computer_study
Recursion 본문
1. 기본 개념
- 간단하게 재귀함수를 뜻한다.
- 하지만 수학함수 계산에만 유용한 것이 아니다.
- 자기 자신을 재 참조하는 방법을 말한다.
- 모든 recursion은 반복문으로 변경 가능하고, 그 역도 성립한다.
- recursion은 복잡한 알고리즘을 단순하고 알기 쉽게 표현하지만 함수 호출에 따른 오버헤드가 있다.
2. 문제풀이 시 중요한 부분
- 기저부분(base case)와 순환부분(recursive case)를 나누어 생각해야된다.
- 기저를 먼저 생각해본다.
3. 예시
- 펙토리얼 함수
#include <iostream>
using namespace std;
int fac(int n){
if(n == 1)
return 1;
else
return n * fac(n-1);
}
int main(){
int result;
result = fac(5);
cout << result << endl;
}
'5!'를 출력하는 코드
- 피보나치 수열 (n번째 수열의 값 구하기)
#include <iostream>
using namespace std;
int fibo(int n){
if( n < 0){ // exception
cout << "please put positive integer" << endl;
return -1;
}
if( n < 2 )
return n;
else
return fibo(n-2) + fibo(n-1);
}
int main(){
int result,n;
cin >> n;
result = fibo(n-1);
cout << result << endl;
}
n을 입력받아 n번째 피보나치수열의 값을 출력하는 코드
- 두 수의 최대공약수 구하기
※ Euclid Method
1. a≥b인 두 양의 정수 a와 b에 대해서 a가 b의 배수이면 gcd(a , b) = b이고, 그렇지 않으면 gcd(a,b) = gcd(b , a%b)
2. gcd(a , b) = a (b가 0이라면)
= gcd(b , a%b) (b가 0이 아니라면)
#include <iostream>
using namespace std;
int gcd(int a, int b){
if(a < b){
int tmp;
tmp = a;
a = b;
b= tmp;
}
if(a % b == 0){
return b;
}
else{
return gcd(b, a%b);
}
}
int main(){
int result,a,b;
cin >> a >> b;
result = gcd(a,b);
cout << result << endl;
}
숫자 a.b (무조건 양수라 가정) 를 입력받아 최대공약수를 출력하는 코드
- 문자열의 길이 계산
string을 지나가며 비어있지 않으면 1을 더하고 다음 부분을 확인
- 문자열의 프린트
길이 계산할 때 처럼 string을 지나가며 하나씩 출력.(출력 뒤에 recursion들어간다.)
- 문자열을 뒤집어 프린트
recursion으로 먼저 들어간 뒤에 출력 (앞 문자열 프린트와 반대로 출력)
4. 강의 내용 정리
순환의 개념과 기본 예제 1: excelsior-cjh.tistory.com/28
Recursion의 개념과 기본 예제들
1. Recursion - 순환 또는 재귀함수라고 부른다. - 메소드를 정의할 때 자기 자신을 재참조 하는 방법을 말한다. 1) 무한루프가 발생하는 경우 : 아래의 코드는 func() 라는 메소드를 아무런 조건없이 ��
excelsior-cjh.tistory.com
순환의 개념과 기본 예제 2: https://excelsior-cjh.tistory.com/29?category=922441
Recursion의 개념과 기본 예제들 - 2
1. 문자열의 길이 계산 1) Base Case : 문자열 값이 null 인 경우 → return 0; 2) Recursive Case : 첫번째 문자를 제외한 길이 + 1을 return 한다. public class RecursionTest { public static void main(Stri..
excelsior-cjh.tistory.com
순환의 개념과 기본 예제 3:
Recursion의 개념과 기본 예제들 - 3
1. 순환 알고리즘의 설계 (Designing Recursion) 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 한다. 모든 case는 결국 base case로 수렴해야 한다. 암시적(implicit) 매개변수를 명시적(ex..
excelsior-cjh.tistory.com
'알고리즘 > 개념정리' 카테고리의 다른 글
[python/c++] (key, value)로 변수저장하기 (dictionary, map) (0) | 2020.08.12 |
---|---|
[c++] 문자 입력 방법 ( get line( ) ) (2) | 2020.08.11 |
[알고리즘] counting sort (계수 정렬) (0) | 2020.08.07 |
[Python, C++] 알고리즘을 위한 대표적인(기본적인) 자료구조 (0) | 2020.07.14 |