当前位置:首页 > 教育综合 > 正文

已知Fibonacci数列,

已知Fibonacci数列定义如下:F(1)=1 F(2)=1 F(n)=f(n-1)+f(n-2)(n>2).求Fibonace:数列的第18项

Private Sub Form_Click() Dim f(100) As Long f(1) = 1 f(2) = 1 Print 1; f(1) Print 2; f(2) For i = 3 To 18 f(i) = f(i - 1) + f(i - 2) Print i; f(i) Next End Sub 运行结果:f(18)=2854

已知fibonacci数列:1,1,2,3,5,8,......,它可由下面公式表述:

这个是用C写的。会要求输入一个整数,此时输入50即可。当然可以略作修改,只算F(50)。

#include

int main()

{

int n, first = 0, second = 1, next, c;

printf("Enter the number of terms\n");

scanf("%d",&n);

printf("First %d terms of Fibonacci series are :-\n",n);

for ( c = 0 ; c < n ; c++ )

{

if ( c <= 1 )

next = c;

else

next = first + second;

first = second;

second = next;

}
printf("%d\n",next);

}

return 0;

}

斐波那契数列的定义者

是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的莱昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。

他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点于阿尔及利亚地区,莱昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。另外斐波纳契还在计算机C语言程序题中应用广泛。

分别用非递归和递归的方法编写函数求斐波那契数列第n项。斐波那契数列1,1,2,3,5,8,13,…

/**

已知Fibonacci数列:1,1,2,3,5,8,……,F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)

*/

#include

#include

typedef long long int int64;

//方法1,递归法

int64 Fibonacci(int n)

{

int64 sum;

if(n<=0)

{

printf("参数值非法!\n");

exit(-1); //直接终止程序

}

if(n==1 || n==2)

return 1;

else

sum=Fibonacci(n-1)+Fibonacci(n-2);

return sum;

}

非递归法

int64 Fibonacci2(int n)

{

int64 a,b,c;

if(n<=0)

{

printf("参数值非法!\n");

exit(-1); //直接终止程序

}

if(n==1 || n==2)

return 1;

a=b=1; //对前两项的值初始化

n=n-2; //因为是从第3项开始记次数,所以减2

while(n > 0)

{

c=a+b;

a=b;

b=c;

n--;

}

return c;

}

//测试主函数

int main()

{

int n;

scanf("%d",&n); //输入n

//printf("F(%d)=%lld\n",n,Fibonacci(n));

printf("F(%d)=%lld\n",n,Fibonacci2(n));

return 0;

}

//示例运行结果

F:\c_work>a.exe

5

F(5)=5

F:\c_work>a.exe

6

F(6)=8

program fibo;var n,i:integer; rs:extended;function fib(m:integer):extended;var a,b:extended;

begin

a:=1;b:=1;if m<=2 then exit(1)else while m>3 do begin

fib:=a+b;a:=b;b:=fib;m:=m-1;end;exit(fib);end;

begin

read(n);writeln(fib(n));end.

扩展资料:

从第二项开始,每个偶数项的平方都比前后两项之积少1,每个奇数项的平方都比前后两项之积多1。

如:第二项1的平方比它的前一项1和它的后一项2的积2少1,第三项2的平方比它的前一项1和它的后一项3的积3多1。

(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如从数列第二项1开始数,第4项5是奇数,但它是偶数项,如果认为5是奇数项,那就误解题意,怎么都说不通)

证明经计算可得:[f(n)]^2-f(n-1)f(n+1)=(-1)^(n-1)

参考资料来源:百度百科-斐波那契数列

c问题,fibonacci数列

该问题属于fibonacci取余的问题

解法如下:

需要注意的是:

1:这道题目,建议用临时变量,没必要用数组存数列,因为题目不关心数列,只关心取余,也无法知道要设置多大的数组合适,设置小了,数组溢出,设置大了,影响内存(特别是像这样定义了这样的大数组data[20000],在之后的找工作,面试是很被动,很容易被刷);

2:为了防止n太大,f(n)的值导致int存不下,可分步取余(c=(a+b)%10007),然后再加,再取余;

f(n-1)=( f(n-2)+f(n-3) )%10007

f(n-2)=( f(n-3)+f(n-4) )%10007

f(n)=( f(n-1)+f(n-2) )%10007

c语言算法

#include "stdio.h" #include "stdlib.h" int main() { __int64 i,s=0,f0[50];//用int64 int保存不下的,他只有32位 f0[1]=f0[2]=1; for(i=3;i<50;i++) f0[i]=f0[i-1]+f0[i-2]; for(i=1;i<=49;i+=2) s+=f0[i]; printf("s=%I64d\n",s); return 0; }
展开全文阅读