a! = (a-1)(a-2)(a-n)...
int fact(int n) {
if(n == 1 || n == 0) return 1;
return n * fact(n-1);
}
그런데 팩토리얼 같은 경우는 반복문으로 작성이 가능하다.
그러니 재귀함수보단 반복문이 가능하면 작성해주자! 왜냐, 재귀함수는 오래걸리고 너무 많이 자기를 호출하기 때문이다.
int loop(int n) {
int result = 1;
for(int i = 1; i <= n; i ++) {
result *= i;
}
return result;
}
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
f(6) = f(5) + f(4) -> 8
f(5) = f(4) + f(3) -> 5
f(4) = f(3) + f(2) -> 3
f(3) = f(2) + f(1) -> 2
f(2) = f(1) + f(0) -> 1
f(1) -> 1
f(0) -> 0
int fibo(int n) {
if(n == 0 || n == 1) return n;
return fibo(n-1) + fibo(n-2);
}
#include <bits/stdc++.h>
using namespace std;
int fact(int n) {
if (n == 1 || n == 0) return 1;
return n * fact(n - 1);
}
// 팩토리얼 반복문으로 작성
int loop(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// 피보나치 수열
int fibo(int n) {
if (n == 0 || n == 1) return n;
return fibo(n - 1) + fibo(n - 2);
}
// n 은 초기값 4로 선언
int n = 4;
int main() {
// 출력
cout << "팩토리얼 결과 : " << fact(n) << ", 피보나치수열 결과 : " << fibo(n) << "\n";
return 0;
}
/*
결과
팩토리얼 결과 : 24, 피보나치수열 결과 : 3
*/