已知Fibonacci数列,
- 教育综合
- 2024-02-17 12:59:52
已知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; }下一篇
返回列表