阶乘求和的几种方法
目录
一、阶乘定义
二、阶乘求和
1.两层for循环嵌套使用
2.一层for循环直接实现
3.函数的递归调用来求阶乘
总结
一、阶乘定义
任何大于等于1 的自然数n 阶乘表示方法:
n!=n*(n-1)*(n-2)······3*2*1
二、阶乘求和
1.两层for循环嵌套使用
代码如下(示例):
#include<stdio.h>
int main()
{
int sum = 0;
int ret = 1;
int i, j;
int n;
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
ret = 1;
//此处不对ret进行值的重置,在下一次的循环中,ret的初始值不为1会出错
for (j = 1; j <= i; j++)
{
ret = ret * j;
}
sum += ret;
}
printf("%d",sum);
return 0;
}
重点:
每一次都得让ret重置为1的原因:
每一个数字的阶乘都是从1开始一直乘到这个数字本身为止,如果我们没有将ret重置为1,那么下一个数字计算时也会用到ret,但是此时ret不为1,阶乘计算就会出错。
2.一层for循环直接实现
代码如下(示例):
不再对ret的值进行重置,直接拿来乘i直接得到了下一个数的阶乘
#include<stdio.h>
int main()
{
int ret = 1;
int sum = 0;
int n = 0;
scanf("%d",& n);
for (int i = 1; i <= n; i++)
{
ret = ret * i;
sum += ret;
}
printf("%d", sum);
return 0;
}
3.函数的递归调用来求阶乘
int factorial(int n)
{
int a;
if (n == 0)
{
return 1;
}
a = factorial(n - 1) * n;
return a;
}
int main()
{
int n;
int sum = 0;
int i;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum += factorial(i);
}
printf("%d", sum);
return 0;
}
总结:
三种方法可以用来阶乘求解,逐步优化
文章出处登录后可见!
已经登录?立即刷新