예습

[예습] 11월 25일 예습

k-codestudy 2024. 11. 24. 19:41

재귀 함수 예시 문제 풀이

 

1. 팩토리얼 

// for문
#include <iostream>

int main()
{
	int nFactorial{};
	int nNum{};

	nFactorial = 1;

	scanf_s("%d", &nNum);

	for (int i = 1; i <= nNum; i++)
	{
		nFactorial = nFactorial * i;
	}
	printf("%d\n", nFactorial);
}


// while문
#include <iostream>

int main()
{
	int nFactorial{};
	int nNum{};
	int nIndex{};

	nFactorial = 1;
	nIndex = 1;

	scanf_s("%d", &nNum);

	while (nIndex <= nNum)
	{
		nFactorial = nFactorial * nIndex;
		nIndex++;
	}
	printf("%d\n", nFactorial);
}

// 재귀 함수
#include <iostream>

void nFactorial(int nData, int* pData);

int main()
{
	int nResult{};

	nFactorial(5, &nResult);

	printf("%d\n", nResult);
}

void nFactorial(int nData, int* pData)
{
	int nResult{};

	nResult = 1;

	if (nData < 1)
		return;

	nFactorial(nData - 1, &nResult);
	*pData = nResult * nData;
}

 

2. 파보나치 수열

// for문
#include <iostream>

int main()
{
	int arFibonacci[9]{};

	arFibonacci[0] = 1;
	arFibonacci[1] = 1;

	printf("%d\n", arFibonacci[0]);
	printf("%d\n", arFibonacci[1]);

	for (int i = 2; i < 9; i++)
	{
		arFibonacci[i] = arFibonacci[i - 1] + arFibonacci[i - 2];
		printf("%d\n", arFibonacci[i]);
	}
}

// while문
#include <iostream>

int main()
{
	int arFibonacci[9]{};
	int nIndex{};

	nIndex = 2;
	arFibonacci[0] = 1;
	arFibonacci[1] = 1;

	printf("%d\n", arFibonacci[0]);
	printf("%d\n", arFibonacci[1]);

	while (nIndex < 9)
	{
		arFibonacci[nIndex] = arFibonacci[nIndex - 1] + arFibonacci[nIndex - 2];
		printf("%d\n", arFibonacci[nIndex]);
		nIndex++;
	}
}

// 재귀 함수
#include <iostream>

void Fibonacci(int *pData, int nLength);

int main()
{
	int arFibonacci[9]{};

	arFibonacci[0] = 1;
	arFibonacci[1] = 1;

	Fibonacci(arFibonacci, 9);
	
	for (int i = 0; i < 9; i++)
	{
		printf("%d ", arFibonacci[i]);
	}
	printf("\n");
}

void Fibonacci(int* pData, int nLength)
{
	if (nLength < 3)
		return;

	nLength--;
	Fibonacci(pData, nLength);

	pData[nLength] = pData[nLength - 1] + pData[nLength - 2];
}

 

3. 최소 공배수

// for문
#include <iostream>

int main()
{
	int n1{};
	int n2{};
	int nMin{};
	int nGCD{};
	int nLCM{};

	scanf_s("%d", &n1);
	scanf_s("%d", &n2);

	nMin = n1;
	if (nMin > n2)
		nMin = n2;


	for (int i = 1; i <= nMin; i++)
	{
		if (n1 % i == 0 && n2 % i == 0)
			nGCD = i;
	}

	nLCM = (n1 * n2) / nGCD;
	printf("%d\n", nLCM);
}

// while문
#include <iostream>

int main()
{
	int n1{};
	int n2{};
	int nMin{};
	int nGCD{};
	int nLCM{};
	int nCount{};

	scanf_s("%d", &n1);
	scanf_s("%d", &n2);

	nMin = n1;
	if (nMin > n2)
		nMin = n2;

	nCount = 1;

	while (nCount <= nMin)
	{
		if (n1 % nCount == 0 && n2 % nCount == 0)
			nGCD = nCount;

		nCount++;
	}

	nLCM = (n1 * n2) / nGCD;
	printf("%d\n", nLCM);
}

// 재귀 함수
#include <iostream>

void LCM(int n1, int n2, int nCount, int& nResult);

int main()
{
	int n1{};
	int n2{};
	int nResult{};

	scanf_s("%d", &n1);
	scanf_s("%d", &n2);

	LCM(n1, n2, 1, nResult);
	printf("%d\n", nResult);
}

void LCM(int n1, int n2, int nCount, int& nResult)
{
	
	if (nCount > n1 || nCount > n2)
		return;

	int nGCD{};
	if (n1 % nCount == 0 && n2 % nCount == 0)
	{
		nGCD = nCount;
		nResult = (n1 * n2) / nGCD;
	}

	LCM(n1, n2, nCount + 1, nResult);
}

 

4. 최대 공약수 

// for문
#include <iostream>

int main()
{
	int n1{};
	int n2{};
	int nMin{};
	int nResult{};

	scanf_s("%d", &n1);
	scanf_s("%d", &n2);

	nMin = n1;
	if (nMin > n2)
		nMin = n2;

	for (int i = 1; i <= nMin; i++)
	{
		if (n1 % i == 0 && n2 % i == 0)
			nResult = i;			
	}
	printf("%d\n", nResult);
}

// while문
#include <iostream>

int main()
{
	int n1{};
	int n2{};
	int nMin{};
	int nResult{};
	int nCount{};

	scanf_s("%d", &n1);
	scanf_s("%d", &n2);

	nCount = 1;

	nMin = n1;
	if (nMin > n2)
		nMin = n2;

	while (nMin >= nCount)
	{
		if (n1 % nCount == 0 && n2 % nCount == 0)
			nResult = nCount;

		nCount++;
	}
	printf("%d\n", nResult);
}

// 재귀 함수
#include <iostream>

void GCF(int n1, int n2, int nCount, int *pData);

int main()
{
	int nResult{};

	GCF(20, 40, 1, &nResult);

	printf("%d ", nResult);
}

void GCF(int n1, int n2, int nCount, int* pData)
{
	if (nCount > n1 || nCount > n2)
		return;

	if (n1 % nCount == 0 && n2 % nCount == 0)
		*pData = nCount;

	GCF(n1, n2, nCount + 1, pData);
}

 

 

5. 하노이 탑

'예습' 카테고리의 다른 글

[예습] 12월 9일 예습  (0) 2024.12.09
[예습] 12월 2일 예습  (0) 2024.12.02
[예습] 11월 18일 예습  (1) 2024.11.18
[예습] 11월 11일 예습  (0) 2024.11.12
[예습] 10월 21일 예습  (0) 2024.10.21