c, git, 컴퓨터/자료구조 & 알고리즘
Recursion 재귀함수
컴맹학자
2022. 9. 4. 20:35
728x90
특징 : 자기 자신을 호출 해서 사용 하는 형태의 알고리즘
장점 : 짧은 코드로 작성을 할 수 있어서 클린 코드로 구현이 가능 하다
단점 : 작성한 본인 이외 다른 사람이 해당 구현한 코드를 알아 보기 힘들다.

#pragma once
class Recursion
{
public:
void example_1();
void example_2(int val);
int example_3(int val);
int example_4(int val);
int example_5(int val, int size);
int example_6(int val);
int example_7(int val, int val2);
int example_8(int val, int val2);
};
Recursion.h
#include "Global.h"
#include "Recursion.h"
void Recursion::example_1()
{
cout << "무한루프 재귀 함수" <<endl;
example_1();
}
void Recursion::example_2(int val)
{
if (val <= 0)
return ;
cout << "호출된 값 :" << val<<endl;
example_2(val - 1);
}
int Recursion::example_3(int val)
{
if (val <= 0)
return val;
return val + example_3(val-1);
}
int Recursion::example_4(int val)
{
if (val <= 0)
return 1;
return val * example_4(val - 1);
}
int Recursion::example_5(int val, int size)
{
if (size == 0)
return 1;
else
return val * example_5(val, size - 1);
}
int Recursion::example_6(int val)
{
if (val < 2)
return val;
else
return example_6(val -1) + example_6(val-2);
}
int Recursion::example_7(int val, int val2)
{
//Swap (val이 무족건 큰수가 되야 한다)
if (val < val2)
{
int temp = val;
val = val2;
val2 = temp;
}
if (val % val2 == 0)
return val2;
else
return example_7(val, val % val2);
}
int Recursion::example_8(int val, int val2)
{
if (val2 == 0)
return val;
else
return example_8(val2, val % val2);
}
Recursion.cpp
형태 1. 무한 루프 상황 (문제가 되는 재귀 함수)
형태 2. 재귀 함수 조건으로 빠져 나오는 방법
형태 3. 재귀함수 1 ~ n 까지의 합 구현
형태 4. n! Factorial
형태 5. x의 제곱근
형태 6. 피보나치(Fibonacci)
형태 7,8 두수의 최대 공약수 (기본 , 단순)