C语言如何用数组求Fibonacci数列的前N项和

Fibonacci数列就是后一项是前两项之和 1 1 2 3 5 8 13 21......依次类推。要求求前N项和,N从1开始。自己写的一直不对。求大神帮下忙。

1、首先打开vc,点击文件、新建;

2、选择win32 console application 并在右侧输入工程的名字和地址,确定;

3、选择一个空的工程,完成。

4、再次点击文件、新建,

5、选择c++ source file 并输入文件名字,确定,

6、输入如图所示的代码,这里以前十个斐波那契数列数为例,需要输出其他个数请把5改成对应数字的一半(比如要输出前20个,就把图中的5改成10);

7、点击右上角的编译运行按钮。

8、成功地输出了斐波那契数列的前十项,如图。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-25

#include<stdio.h>

int main()

{

int i,f[21]={1,1};//对最前面两个元素f[0]和f[1]赋初值1

for(i=2;i<21;i++)

{

f<i>=f[i-2]+f[i-1];//先后求出f[2]~f[20]的值

}

for(i=0;i<21;i++)

{

if(i%5==0)//控制每输出5个数后换行

{

printf("\n");

}

printf("%d\t",f<i>);//输出一个数

}

printf("\n");

return 0;

}

扩展资料:

printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。

其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

比如:

int a=1234;

printf("a=%d\n",a);

输出结果为a=1234。

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。

int scanf(const char*restrict format,...);

函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

如:

scanf("%d%d",&a,&b);

函数返回值为int型,如果a和b都被成功读入,那么scanf的返回值就是2。

本回答被网友采纳
第2个回答  推荐于2017-09-18

    什么是Fibonacci数列。
    Fibonacci数列列出的前几项:1,1,2,3,5,8,13,21,3前两项之和等于第三项,这个也就是大家说的黄金分割。
    递推式:
    F1 = 1               (n = 1)
    F2 = 1               (n = 2)
    Fn = Fn-1 + Fn-2     (n ≥2)

    用C语言完成的求前N项之和:

    #include<stdio.h>
    void main(){
     long sum=0;
     long a[100];
     int i,n;
     scanf("%d",&n);    //输入N
     a[0]=a[1]=1;
     sum=2;
     for(i=2;i<n;i++) {
       a[i]=a[i-1]+a[i-2];    //求第N项
       sum=sum+a[i];    //累加求和
     }
     printf("%ld",sum);
    }

第3个回答  2012-11-16
斐波那契数列是个很经典的数列了,这个数列可以用两种方法实现,递归实现和循环实现,下面分别用递归和循环实现一次吧,希望对你有帮助。
递归:
Long Fibonacci( unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
递归实现非常简单,代码也简单明了,但是递归有个致命的弱点,里面计算很多是重复的,当n很大的时候,计算量会变得非常大,效率非常低.
循环:
long Fibonacci( unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
long one=1;
long two=0;
long fadd=0;
for( int i=0;i<=n;i++)
{
fadd=one+two;
two=one;
one=fadd;
}
return fadd;
}
此种方法是首先根据f0,f1计算出f2,然后由f1,f2,计算出f3,依次类推,时间复杂度O(N),效率就改善了很多。推荐此种方法。
希望对你有帮助!!!
第4个回答  2012-11-16
#include<stdio.h>
#include<stdlib.h>
#define N 200
long int F[N];
void Fi(int n);
long int Sum(int n);
void main()
{
int n;
long int sum;
printf("你想求多少项的和?请输入:");
scanf("%d",&n);
if(n<=0)
{
printf("输入应大于0!\n");
system("pause");
return;
}
Fi(n);
sum=Sum(n);
printf("Fibonacc数列前%d项和为:%ld\n",n,sum);
system("pause");
}

void Fi(int n)
{
int i=n;
F[0]=F[1]=1;
if(n>2)
for(i=2;i<n;i++)
{
F[i]=F[i-1]+F[i-2];
}
printf("Fibonacc数列前%d项为:\n",n);
for(i=0;i<n;i++)
printf("%d ",F[i]);
printf("\n");

}
long int Sum(int n)
{
int i;long int sum=1;
if(n>=2)
sum=2;
if(n>=3)
for(i=2;i<n;i++)
{
sum=sum+F[i];
}
return sum;
}
我在VC上运行过,正确。本回答被提问者采纳
相似回答