컴맹학자 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 두수의 최대 공약수 (기본 , 단순)