C语言如何用数组求Fibonacci数列的前N项和
1、首先打开vc,点击文件、新建;
2、选择win32 console application 并在右侧输入工程的名字和地址,确定;
3、选择一个空的工程,完成。
4、再次点击文件、新建,
5、选择c++ source file 并输入文件名字,确定,
6、输入如图所示的代码,这里以前十个斐波那契数列数为例,需要输出其他个数请把5改成对应数字的一半(比如要输出前20个,就把图中的5改成10);
7、点击右上角的编译运行按钮。
8、成功地输出了斐波那契数列的前十项,如图。
#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。
什么是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);
}
递归:
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),效率就改善了很多。推荐此种方法。
希望对你有帮助!!!
#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上运行过,正确。