用循环写一个程序,求斐波那契数列前20个数字的和(1.1.3.5.8.13.....)

annfine1 2007-09-18 10:01:02
要求输出显示是:1+1+3+5+.....=?
...全文
8692 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
icesorrow 2007-10-06
  • 打赏
  • 举报
回复
效率最高的解法:直接print结果(不才20个数吗?)
次解:f(n+2)=f(n+1)+f(n)
构造特征方程f(n+2)-pf(n+1)=q[f(n+1)-pf(n)] =>解出p,q,得到递推公式,完了!
LS_Winson 2007-10-06
  • 打赏
  • 举报
回复
不过想问这个通项是怎么弄到的?
LS_Winson 2007-10-06
  • 打赏
  • 举报
回复
OpenHero的方法计算常量不错,deng2000的方法很好,对数学的运用
kakataka 2007-09-25
  • 打赏
  • 举报
回复
递归太耗时间,数组太耗空间
qs0402abc 2007-09-25
  • 打赏
  • 举报
回复
之前说错了,富士康考的那个数列不是奇数列,是LZ的这个数列的叠加
soniube 2007-09-23
  • 打赏
  • 举报
回复
都不错,想法都很新奇 我刚学C,现在也只能模仿别人的。惭愧!!!
OpenHero 2007-09-23
  • 打赏
  • 举报
回复
我面壁去,没看题目~输出- -!
OpenHero 2007-09-23
  • 打赏
  • 举报
回复
namespace EffCpp
{
template<unsigned N>
struct Fibonacci
{
enum{ value = Fibonacci<N-1>::value + Fibonacci<N-2>::value };
};

template<>
struct Fibonacci<0>
{
enum{ value = 1 };
};

template<>
struct Fibonacci<1>
{
enum{ value = 1 };
};
}
deng2000 2007-09-23
  • 打赏
  • 举报
回复
作了个既无递归也无循环的简单程序实现我前面的想法:

#include <iostream>
#include <math.h>
using namespace std;

//////////////////////////////////////////
// Fib():
// Calculate n-th Fibnacci number without loop or recursion
int Fib(int n)
{
static double r = sqrt(5.0);
static double x1 = (1+r)/2;
double f = 1/r * pow(x1,n) + 0.5;
return (int)f;
}

int main(int argc,char * argv[])
{
// Sum of the first 20 Fibnacci numbers equals to Fib(22)-1
int sum = Fib(22) - 1;
cout << "1+1+2+...+" << Fib(20) << " = " << sum << endl;
return 0;
}

运行结果为:

1+1+2+...+6765 = 17710
gs0038 2007-09-23
  • 打赏
  • 举报
回复
deng2000() ( ) 信誉:100

这个计算的太巧了,用的刚好是递归算法的时间复杂度的原理!
古铁神刀 2007-09-22
  • 打赏
  • 举报
回复
对不起,发错了上面的。
古铁神刀 2007-09-22
  • 打赏
  • 举报
回复
main(){
double w,n,i;
printf("%d",&n);
scanf("%d",&n);
for(i=0;i<20;i++)
w+=fib(n);
printf("%.0lf",w);
}

double fib(int n){
if(n==0||n==1)
return 1;
else
return n*fib(n-1);


}
StarDreamss 2007-09-22
  • 打赏
  • 举报
回复
用递归吧,书上就是这么写的啊
古铁神刀 2007-09-22
  • 打赏
  • 举报
回复
发一个吧。
/*方法一*/
main(){
int n=20;
double w;
w=fib(n);
printf("%.0lf",w);

}

double fib(int n){
double a1=1,a2=1,a3,s=a1+a2;;
int i;
for(i=3;i<=20;i++){
a3=a1+a2;
a1=a2;
a2=a3;
s+=a3;
}
return s;
}

另外manrenmanren(蛮人)的方法也行,不过要注意的是变量的存储范围。数列增长速度很快,int类型可能不行吧
deng2000 2007-09-21
  • 打赏
  • 举报
回复
我也凑个热闹
首先,楼主有个笔误吧,Fibonacci数列前几项是1,1,2,3,5...,楼主漏了"2"
其次,Fibnacci数列有个很有趣的性质:

F[1] + F[2] + F[3] + ... + F[n] = F[n+2] - 1

因此此题只需要用一个简单的循环计算出F[22]的值,再减1即可.
其实此题最简单的解法连循环都不需要.因为我们知道F[n]的通项公式,从它一个表达式就可求出F[22]的值.
btw, F22,多么熟悉的名字,出题者岂有意乎.
Mr.Chronos 2007-09-20
  • 打赏
  • 举报
回复
我上次去富士康面试,题目是1+(1+3)+(1+3+5)+……试试这个,这个有难度
__________________________________________
不是想像中那么难吧
//求自然数前N个奇数: 1+(1+3)+(1+3+5)+……的和
int GetSum(int n)
{
int i = 0;
int j = 0;
int sum = 0;
for(i=1,j=0; i<=(2*n-1); i+=2,j++)
sum += (n-j) * (2*j+1);
return sum;
}
ruanchao 2007-09-20
  • 打赏
  • 举报
回复
我也来凑凑热闹哈!
gongyiling 2007-09-20
  • 打赏
  • 举报
回复
这样的话更简单些
int GetSum(int n)
{
return (2*n+1)*n(*n+1)/6;
}
Mr.Chronos 2007-09-20
  • 打赏
  • 举报
回复
huhaihong() 分析的更好~相当于这样吧1^2+2^2+3^2+……+n^2
这样的话更简单些
int GetSum(int n)
{
int sum = 0;
for(int i=1; i<=n; i++)
sum += i*i;
return sum;
}
Mr.Chronos 2007-09-19
  • 打赏
  • 举报
回复
long Fibonacci(int n)
{
long i = 1;
long j = 0;
long sum = 0;
int m = n;

if(n % 2)
n = n / 2 + 1;
else
n = n / 2;
while (n> 0) {
i = i + j;
j = j + i;
sum = sum + i +j;
n--;
}
if(m % 2)
sum = sum - j;
return sum;
}
加载更多回复(22)

69,373

社区成员

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

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