IT 프로그래밍

[알고리즘] Recursion

기술1 2025. 3. 12. 13:18

순환이란? Recursion

자기 자신을 호출하는 함수

void func(...)
{
	...
    func(...);
    ...
}

 

 

int main() {
	int result = func(4);
}

int func(int n) {
	if (n==0)
    	return 0;
    else
    	return n + func(n-1);
}

    

무한루프에 빠지지 않으려면 Base case 즉 적어도 하나의 recursion에 빠지지 않는 경우가 존재해야 합니다.  단순하게 base case가 무한루프에 빠지지 않는다고 볼 수는 없으며 Recursion을 반복하다 보면 Base case로 반드시 수렴해야 된다는 것입니다. 

 

Recursion의 대표적인 예 : factorial: n!

0! = 1

n! = n * (n-1)!        n>0

int factorial(int n)
{
	if (n == 0)
    	return 1;
    else
    	return n * factorial(n-1);
}

시간복잡도는 o(n) 입니다.

 

 

x^n을 계산하는 것

double power(double x, int n)
{
	if(n==0)
    	return 1;
    else
    	return x*power(x, n-1);
}

 

피보나치 수열

int fibonacci(int n)
{
	if (n < 2)
		return n;
	else
		return fibonacci(n - 1) + fibonacci(n - 2);
}

 

T(n)을 피보나치수열의 n번째 숫자를 계산하기 위한 연산 횟수라고 하면  T(0) = 1, T(1) = 1이다. 또한 T(n-1) > T(n-2) 임으로, 2 이상의 n에 대하여 다음이 성립한다.

T(n) = T(n-1) + T(n-2) + 1 > 2 x T(n-2) > 2^2 x T(n -4).... > 2^n/2 x T(0) = 2^n/2

 

따라서 위 알고리즘의 시간복잡도는 O(2^n)임

 

최대공약수

double gcd(int m, int n)
{
	if (m<n)
	{
		int tmp = m; m = n; m = tmp;
	}
	if (m % n == 0)
		return n;
	else
		return gcd(n, m % n);
}
int gcd(int p, int q)
{
	if (q == 0)
		return p;
	else
		return gcd(q, p % q);
}

 

'IT 프로그래밍' 카테고리의 다른 글

[인공지능] 인공신경  (0) 2025.03.12
[인공지능] ML vs DL  (0) 2025.03.11
CPU 및 메모리에 대한 설명  (1) 2024.08.21
[따배시 C++ 8.2] 캡슐화, 접근 지정자, 접근 함수  (0) 2024.04.08
[따배시] C++ 기초  (0) 2024.03.04