输入一个值n,输出从1到n的阶乘相加,因为刚开始学C语言没多久,所以不会做
循环遍历就可以了,参考:
#include <stdio.h>
int main()
{
double t=1;
int n,i;
//输入n
scanf("%d",&n);
for(i=1;i<=n;i++)
{
//计算i的阶乘
t *= i;
}
//输出
printf("%lf",t);
return 0;
}
下面是一个实现,供参考:
#include <stdio.h>
int main(void){
int n; //要计算到多少的阶乘
int i,j; //循环变量
int sum =0; //记录阶乘之和
int single=1; //记录单项阶乘
scanf("%d",&n);
for(i=1;i<=n;i++){ //计算从1到n的阶乘 之和
for(j=1;j<=i;j++){ //计算从1到n每一项阶乘
single*=j; //每个数的阶乘
}
sum+=single; //每项阶乘相加
}
printf("1到%d的阶乘之和是:%d.\n",n,sum);
return 0;
}
这要看你n的取值范围有多大,如果很大的话,要用大数阶乘了,网上可以搜到。如果在double范围内,可以用double类型
定义一个阶乘函数,然后在主函数里循环调用
#include <stdio.h>
double jc(int n)
{
double s = 1;
for(int i=1;i<=n;i++)
s *= i;
return s;
}
int main()
{
int n,i;
double s = 0;
scanf("%d",&n);
for(i=1;i<=n;i++)
s += jc(i);
printf("%lf",s);
return 0;
}
阶乘实现用循环最简单,递归实现如下:
// 递归实现阶乘相加
#include <stdio.h>
//求n的阶乘
long factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
else {
return factorial(n - 1) * n; // 递归调用
}
}
int main() {
int n,i;
long sum=0;
printf("Input a number: ");
scanf("%d", &n);
for(i=1;i<n+1;i++)
{
sum= sum+factorial(n);
}
printf("sum = %ld\n", n,sum);
return 0;
}
递归就是函数调用自身。要想理解递归函数,重点是理解它是如何逐层进入,又是如何逐层退出的。
递归函数都应该只进行有限次的递归调用,即必须有退出条件,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。
递归函数也只是一种解决问题的技巧,它和其它技巧一样,也存在某些缺陷,具体来说就是:递归函数的时间开销和内存开销都非常大,极端情况下会导致程序崩溃。同时测试输入数不要太大,太大会溢出。