재귀 함수 예시 문제 풀이
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 |