一个小程序 求教

langdeng2007 2008-08-05 09:03:42
已知 a(1)=10,a(2)=-3, a(n)=3a(n-1)+a(n-2),求{a(n)}前20项的和;

惭愧,初学;不会,请教?
...全文
258 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysysbaobei 2008-08-08
  • 打赏
  • 举报
回复
mark
wslfjnu 2008-08-08
  • 打赏
  • 举报
回复
记号
langdeng2007 2008-08-07
  • 打赏
  • 举报
回复
有递归,数组,循环,学到了3种方法!又知道了一些效率的问题,很感谢各位!
xuhuanzhe 2008-08-06
  • 打赏
  • 举报
回复
递归问题,用递归代码简洁,也容易理解。
ecjtuhr 2008-08-06
  • 打赏
  • 举报
回复

#include <stdio.h>
int a(int n)
{
if(n==1)
return 10;
if(n==2)
return -3;
return (3*a(n-1)+a(n-2));
}

int main()
{
int sum=0;
int n;
for(n=1;n <=20;n++)
sum+=a(n);
printf("The sum is %d\n",sum);
return 0;
}

正确!
fansyong 2008-08-06
  • 打赏
  • 举报
回复
以上你们写的程序,不就是函数的递规调用吗?
bitxinhai 2008-08-06
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

void main()
{
int a[20];
a[0] = 10;
a[1] = -2;
int sum = a[0] + a[1];
for(int i = 2;i < 20;i++)
{
a[i] = 3*a[i-2] + a[i-1];
sum += a[i];
}
cout<<sum<<endl;
}
hongyzniu 2008-08-06
  • 打赏
  • 举报
回复
不好意思 上题的num3=num2+(3*num1);
按照题目意思应该是num3=3*num2+num1;



/*递归做法,不大可取~
*/
#include <stdio.h>
#include <stdlib.h>

int fun(int n)
{
if(n==1)
{
return 10;
}
if(n==2)
{
return -3;
}
else return 3*fun(n-1)+fun(n-2);
}

int main()
{
int i;
int s=0;
for(i=1;i<=20;i++)
{
s+=fun(i);
}
printf("%d\n",s);
return 0;
}
hongyzniu 2008-08-06
  • 打赏
  • 举报
回复
/************
此题可以用递归,也可以用迭代
**************/

#include <stdio.h>
#include <stdlib.h>

int main()
{
int num1=10;
int num2=-3;
int num3;
int s=7; //前两项的和
int i;
for(i=1;i<=18;i++)
{
num3=num2+(3*num1);
s+=num3;
num1=num2; //把三项当中下标最小的用第二小的替换
num2=num3; //把三项当中下标最大的替换第二小的数
}
printf("%d\n",s);
return 0;
}
gesanri 2008-08-06
  • 打赏
  • 举报
回复

main()
{
int a[21],i,sum;
a[1]=10,a[2]=-3;
sum=a[1]+a[2];
for(i=3;i<=20;i++)
{
a[i]=3*a[i-1]+a[i-2];
sum+=a[i];
}
printf("%d",sum);
getch();
}
e_sharp 2008-08-06
  • 打赏
  • 举报
回复
循环
	int a1,a2,a;
a1=10;
a2=-3;
sum = a1+a2;

for(n=3;n<=20;n++) {
a = 3*a2 + a1;
sum += a;

a1=a2;
a2=a;
}

printf("The sum is %d\n",sum);
chenfeng2002 2008-08-06
  • 打赏
  • 举报
回复
8楼不错!~
ChamPagneZ 2008-08-06
  • 打赏
  • 举报
回复

//这个题目是绝对不应该用递归的,太慢了,否则只能叫舍本逐末!!
sico_ 2008-08-06
  • 打赏
  • 举报
回复
这个效率比前面的高
[Quote=引用 8 楼 CSYNYK 的回复:]
手头没有编译器,搂住自己编译一下!

int function(unsigned int element_total) //参数为求和的元素个数
{
int a_n1=10, a_n2=-3, temp=0, sum=0,i=0;
if(element_total==1)
return 10;
else if(element_total==2)
return 7;
else
{
sum=a_n1+a_n2;
for(i=2; i <element_total; i++)
{
temp=3*a_n2+a_n1;
sum+=temp;
a_n1=a_n2;
a_n2=temp;
}
return sum;
}
}
[/Quote]
_石头_ 2008-08-06
  • 打赏
  • 举报
回复
手头没有编译器,搂住自己编译一下!

int function(unsigned int element_total) //参数为求和的元素个数
{
int a_n1=10, a_n2=-3, temp=0, sum=0,i=0;
if(element_total==1)
return 10;
else if(element_total==2)
return 7;
else
{
sum=a_n1+a_n2;
for(i=2; i<element_total; i++)
{
temp=3*a_n2+a_n1;
sum+=temp;
a_n1=a_n2;
a_n2=temp;
}
return sum;
}
}
mz_zhang 2008-08-05
  • 打赏
  • 举报
回复
#include<stdio.h>

int a(int n)
{
if(n==1)
return 10;
if(n==2)
return -3;
return (3*a(n-1)+a(n-2));
}

int main()
{
int sum=0;
int n;
for(n=1;n<=20;n++)
sum+=a(n);
printf("The sum is %d\n",sum);
return 0;
}


理论上对
但是int的最大值 是多少?是不是溢出了?
ykx_yeer 2008-08-05
  • 打赏
  • 举报
回复
用递归代码简洁,也容易理解,干嘛不用递归啊?
lunarfan 2008-08-05
  • 打赏
  • 举报
回复
不用递归就用循环~~~~
langdeng2007 2008-08-05
  • 打赏
  • 举报
回复
请问不用递归该怎么做呢?
realdragon2 2008-08-05
  • 打赏
  • 举报
回复

#include<stdio.h>

int a(int n)
{
if(n==1)
return 10;
if(n==2)
return -3;
return (3*a(n-1)+a(n-2));
}

int main()
{
int sum=0;
int n;
for(n=1;n<=20;n++)
sum+=a(n);
printf("The sum is %d\n",sum);
return 0;
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧