1. 팩토리얼 계산(n!) : n이 자연수일 때, 1~n까지의 모든 자연수의 곱.
#include <iostream>
using namespace std;
// 재귀 함수: 팩토리얼 계산
int factorial(int n) {
if (n == 0 || n == 1) { // 기저 조건
return 1;
} else {
return n * factorial(n - 1); // 재귀 조건
}
}
- 기저 조건 : n==0 또는 n==1일 때, 팩토리얼 값은 1 -> 재귀 종료 조건.
- 재귀 조건 : n이 0 또는 1이 아닐 때, n*factorial(n-1)을 반환하며 자기 자신을 호출.
- 재귀 함수 동작 흐름 : Ex) factorial(5) 계산.
- factorial(5)가 호출되면 5*factorial(4)를 호출.
- factorial(4)가 호출되면 4*factorial(3)을 호출.
- factorial(3)이 호출되면 3*factorial(2)를 호출.
- factorial(2)가 호출되면 2*factorial(1)을 호출.
- factorial(1)이 호출되면 기저 조건에 의해 1을 반환.
- 반환된 값들이 차례로 곱해져 (5, 4, 3, 2 ,1) == 120이 반환.
반복문 예시
- 반복문은 메모리 오버헤드가 없어 더 효율적일 수 있음.
#include <iostream>
using namespace std;
int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; ++i) {
result *= i;
}
return result;
}
2. 피보나치 수열 계산 : 첫째 및 둘째 항이 1이면 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열.
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
반복문
int fibonacci(int n) {
int a = 0, b = 1;
for (int i = 2; i <= n; ++i) {
int temp = a + b;
a = b;
b = temp;
}
return (n == 0) ? a : b;
}