C语言,用递归求数列前N项的平方和

已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。写一子函数其功能是计算并输出该数列前n项的平方之和sum。n的值通过形参传入。要求用递归方法。
谢谢大家,可是题目要求用一个子函数来完成,改怎么办?谢谢。

第1个回答  2008-05-07
//*主函数*////*主函数*////*主函数*//
#include<stdio.h>
void main()
{
int n;int sum_(int n);long sum=0;
printf("please enter a number=");
scanf("%d",&n);
sum=sum_(n);
printf("The square sum is %d\n",sum);
}

//*递归子函数*////*递归子函数*//
int sum_(int n)
{
int a[100];int i;int s=0;
if(n==1||n==2)
return 0;
else if(n==3)return 1;
else
{ a[1]=0;a[2]=0;a[3]=1;
for(i=4;i<=n;i++)
{
a[i]=a[i-1]+a[i-2]+a[i-3];
s=sum_(i-1)+a[i]*a[i];
}
return(s);
}
}

这个子函数花了我不少时间,终于修改完成了。该程序在TC中运行正常,符合楼主的要求。
分别取n值试运行得到的结果如下:n=5时sum=6;n=7时sum=71;n=10时sum=2572;n=12时sum=31514 注意:当n=13时,由于整型最大数才65535,产生了溢出得到sum为负值。如果想扩展其数值大小,可定义变量为long型。
如果在你的C编译环境中无法运行,请认真调试即可。
第2个回答  2008-05-06
sum=(dg(y-1)+dg(y-2)+dg(y-3))*2;
这句为什么乘以2呢?题目好像不是这样要求的嘛

“以后的各项都是其相邻的前三项之和”
修改为:sum=(dg(y-1)+dg(y-2)+dg(y-3));

补充:
下面这个函数是递归求第n项的值啊:
long dg(long y)
{
if(y==1||y==2)
{
return 0;
}
else if(y==3)
{
return 1;
}
else
{
return dg(y-1)+dg(y-2)+dg(y-3);
}
}

“前n项的平方之和”,可以这样写:
int sum_dg(n)
{
if(y==1||y==2)
{
return 0;
}
else if(y==3)
{
return 1;
}
else
{
return sum_dg(y-1)+dg(y)*dg(y);//前n-1项的和,加上第n项的值
}
}

补充:
题目要求:写一子函数其功能是计算并输出该数列前n项的平方之和sum

但并没有限定,计算第n项的值,不能单独写一个函数的嘛
第3个回答  2008-05-06
重新修改过了,你的sum = 0一句把内容都清空了

应改成如下:
long dg(long y)
{

if(y==1||y==2)
{
return 0;
}
else if(y==3)
{
return 1;
}
else
{
return dg(y-1)+y*y; //这才是递归求和!!!

}
}
这个程序出来结果是正确的。
第4个回答  2008-05-06
sum=(dg(y-1)+dg(y-2)+dg(y-3))*2
我没运行,不是平方吗,怎么变成2倍了本回答被提问者采纳
第5个回答  2008-05-06
121
相似回答