阶乘一般都是用递归的方式,但是在重复使用阶乘的场景,就需要使用缓存了,这样就能提升很大效率了。如下:
#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
using namespace std;
int n = 6;
int* cache = new int[n + 1];
// 1. 阶乘方式
int factorial(int n)
{
if(n <= 1)
return 1;
else
return n * factorial(n - 1);
}
// 2. 缓存的阶乘算法
int factorial_cache(int num)
{
if(num < 1)
return 1;
if(num < n)
{
cout << "缓存:" ;
return cache[num];
}
cache[0] = 1;
for (int i = 1; i < num; i++) {
cache[i] = cache[i - 1] * i;
}
for_each(cache, cache + num, [](int i)->void{
cout << i << " ";
});
cout << endl;
return cache[n - 1];
}
int main(int argc, char const *argv[]) {
int f_val = factorial(5);
cout << "f_val = " << f_val << endl;
int c_val = factorial_cache(n);
cout << "c_val = " << c_val << endl;
int val = factorial_cache(5);
cout << "5的阶乘缓存 = " << val << endl;
delete[] cache;
return 0;
}
结果:
f_val = 120
1 1 2 6 24 120
c_val = 120
缓存:5的阶乘缓存 = 120