C语言编写 已知一数列的第n项的通式为f(n)=n*(n+1),分别用非递归法和递归法编程求解该数列第1到1000项的和
就是要求1000阶乘吧,其实计算机的正常运算时做不到1000的,上面的那些程序只会都得到较小数字的阶乘,至于1000,根本算不出来的。。。
看看这个吧。。。
#include<stdio.h>
#define Max 12345
int main()
{
int wei[Max],jinwei[Max];
int i,j,n,k,top=1;
wei[1]=1,jinwei[1]=1;
printf("please input a number:\n");
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(j=1;j<=top;j++)
{
jinwei[j]=(wei[j]*i+jinwei[j-1])/10;
wei[j]=(wei[j]*i+jinwei[j-1])%10;
if(jinwei[top]>=1)
{
top++;
}
}
}
for(k=top;k>=1;k--)
{
printf("%d",wei[k]);
}
getchar();getchar();
}
结果是;
/*
非递归求:f(1) + f(2) + ... + f(m)
其中 f(n) = n*(n+1)
*/
unsigned int sum_fn(unsigned int m)
{
int n, sum=0;
for(n=1; n<=m ;n++)
{
sum += n*(n+1);
}
return sum;
}
/*
递归求:f(1) + f(2) + ... + f(m)
其中 f(n) = n*(n+1)
递归原理:
当 m=1
sum(m) = sum(1) = 1*(1+1) = 2
当 m >= 2
sum(m) = f(1) + f(2) + ...+ f(m-1) + f(m)
= sum(m-1) + f(m)
= sum(m-1) + m(m+1)
*/
unsigned int sum_fn_recursion(unsigned int m)
{
if(m == 1)
return m*(m+1);
else
return sum_fn_recursion(m-1) + m*(m+1);
}
int main(int argc, char *argv[])
{
printf("%u %u\n",sum_fn(1000), sum_fn_recursion(1000));
return 0;
}
for(int i=1;i<=1000;i++)
{
sum=sum+i*(i+1);
}
printf("/d",sum);
#include<stdio.h>
main()
{
int f,n;
for(n=1;n<1001;n++)
{
f=f+n*(n+1);
}
printf("%d\n",f);
非递归:
#include<stdio.h>
main()
{
int f,n=1000;
f=n*(n+1)*(2*n+1)/6+n*(n+1)/2;
printf("%d\n",f);
}
有问题请补充。
#include<stido.h>
void main()
{
int sum=0;
for(int i=1;i<=1000;i++)
{
sum+=i*( i+1);
printf("总和为:%d",sum);
}
递归算法
#include<stdio.h>
int f(n)
{
if(n=1) f(n)=1;
return n*(n+1)+f(n-1);
}
void main()
{
int sum=0;
sum=f(1000);
printf("总和为:%d",sum);