Factorial问题(阶乘问题)
求n!
递归模板:(这递归跟斐波那契一样简单,不用多解释了,不会的话就看懂背下来)
int fact(int n)
{
if(n <= 0) return 1;
return n*fact(n-1);
}
递推模板:
int fact(int n)
{
int res = 1;
for(int i = 1;i <= n;i ++)
res *= i;
return res;
}
合并在一个代码中体现
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
// Factorial递归写法:
int fact_1(int n)
{
if(n <= 0) return 1;
return n*fact_1(n-1);
}
// Factorial递推写法:
int fact_2(int n)
{
int res = 1;
for(int i = 1;i <= n;i ++)
res *= i;
return res;
}
int main()
{
int n;
scanf("%d", &n);
printf("递归法:%d\n",fact_1(n));
printf("递推法:%d\n",fact_2(n));
return 0;
}
求1!+2!+3!+........+n!
这种问题的写法太多了,你要是能自己写对也行,但是我提供一个最精简的写法
其实本质就是基于求n阶乘的基础上加一个计数器
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int fact = 1, sum = 0;
for(int i = 1;i <= n;i ++)
{
fact *= i;
sum += fact;
}
printf("%d",res);
return 0;
}
提炼出模板:
int fact(int n)
{
int fact = 1, sum = 0;
for(int i = 1;i <= n;i ++)
{
fact *= i;
sum += fact;
}
return sum;
}