首页技术用for循环求斐波那契数列(python中的for循环)

用for循环求斐波那契数列(python中的for循环)

编程之家2026-06-03856次浏览

大家好,关于用for循环求斐波那契数列很多朋友都还不太明白,今天小编就来为大家分享关于python中的for循环的知识,希望对各位有所帮助!

用for循环求斐波那契数列(python中的for循环)

关于斐波那契数列Java编程

思路:

斐波那契数列

第0项是0,第1项是第一个1。

这个数列从第三项开始,每一项都等于前两项之和。

java代码如下:

importjava.util.Scanner;

用for循环求斐波那契数列(python中的for循环)

/**

*斐波那契数列

第0项是0,第1项是第一个1。

这个数列从第三项开始,每一项都等于前两项之和

*@authoryoung

*

用for循环求斐波那契数列(python中的for循环)

*/

publicclassFei{

publicstaticvoidfunc(intn){

if(n<3){

System.out.println("0,1");

}elseif(n>3){

inta=0,b=1,c=0;

System.out.print(a+""+b+"");

for(inti=3;i<=n;i++){

c=a+b;

a=b;

b=c;

System.out.print(c+"");

}

}elseif(n<0){

System.out.println("输入数字不符合要求");

}

}

publicstaticvoidmain(String[]args){

Feif=newFei();

Scannerinput=newScanner(System.in);

System.out.print("请输入斐波那契数列的列数n,按ENTER:");

intnum=input.nextInt();

System.out.println("斐波那契数列为:");

func(num);

}

}运行结果如下:

斐波那契数列问题

斐波那契数列的通项公式:

F(N)=0当N=0,

F(N)=1当N=1,2

F(N)=F(N-1)+F(N-2)当N>2

又叫“比内公式”,是用无理数表示有理数的一个范例

F(N)=1/√5)*{[(1+√5)/2]^n- [(1-√5)/2]^n}

似乎你要的是个计算机的程序填空,不过我没看懂那是什么语言的程序

第2个通项明显不适合计算机求解,编程要用第一个,主要是递归的问题

下面是百度查找到的哦:

【斐波那挈数列通项公式的推导】

斐波那契数列:1,1,2,3,5,8,13,21……

如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:

F(1)=F(2)=1,F(n)=F(n-1)+F(n-2)(n≥3)

显然这是一个线性递推数列。

通项公式的推导方法一:利用特征方程

线性递推数列的特征方程为:

X^2=X+1

解得

X1=(1+√5)/2, X2=(1-√5)/2.

则F(n)=C1*X1^n+ C2*X2^n

∵F(1)=F(2)=1

∴C1*X1+ C2*X2

C1*X1^2+ C2*X2^2

解得C1=1/√5,C2=-1/√5

∴F(n)=(1/√5)*{[(1+√5)/2]^n- [(1-√5)/2]^n}【√5表示根号5】

通项公式的推导方法二:普通方法

设常数r,s

使得F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]

则r+s=1,-rs=1

n≥3时,有

F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]

F(n-1)-r*F(n-2)=s*[F(n-2)-r*F(n-3)]

F(n-2)-r*F(n-3)=s*[F(n-3)-r*F(n-4)]

……

F(3)-r*F(2)=s*[F(2)-r*F(1)]

将以上n-2个式子相乘,得:

F(n)-r*F(n-1)=[s^(n-2)]*[F(2)-r*F(1)]

∵s=1-r,F(1)=F(2)=1

上式可化简得:

F(n)=s^(n-1)+r*F(n-1)

那么:

F(n)=s^(n-1)+r*F(n-1)

= s^(n-1)+ r*s^(n-2)+ r^2*F(n-2)

= s^(n-1)+ r*s^(n-2)+ r^2*s^(n-3)+ r^3*F(n-3)

……

= s^(n-1)+ r*s^(n-2)+ r^2*s^(n-3)+……+ r^(n-2)*s+ r^(n-1)*F(1)

= s^(n-1)+ r*s^(n-2)+ r^2*s^(n-3)+……+ r^(n-2)*s+ r^(n-1)

(这是一个以s^(n-1)为首项、以r^(n-1)为末项、r/s为公差的等比数列的各项的和)

=[s^(n-1)-r^(n-1)*r/s]/(1-r/s)

=(s^n- r^n)/(s-r)

r+s=1,-rs=1的一解为 s=(1+√5)/2, r=(1-√5)/2

则F(n)=(1/√5)*{[(1+√5)/2]^n- [(1-√5)/2]^n}

【C语言程序】

main()

{

long fib[40]={1,1};

int i;

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

{

fib[i ]= fib[i-1]+fib[i-2];

}

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

{

printf("F%d==%d\n", i, fib);

}

return 0;

}

【Pascal语言程序】

var

fib: array[0..40]of longint;

i: integer;

begin

fib[0]:= 1;

fib[1]:= 1;

for i:=2 to 39 do

fib[i ]:= fib[i-1]+ fib[i-2];

for i:=0 to 39 do

write('F', i,'=', fib[i ]);

end.

【数列与矩阵】

对于斐波那契数列1,1,2,3,5,8,13…….有如下定义

F(n)=f(n-1)+f(n-2)

F(1)=1

F(2)=1

对于以下矩阵乘法

F(n+1)= 1 1* F(n)

F(n) 1 0 F(n-1)

它的运算就是

F(n+1)=F(n)+F(n-1)

F(n)=F(n)

可见该矩阵的乘法完全符合斐波那契数列的定义

设1为B,1 1为C

1 1 0

可以用迭代得到:

斐波那契数列的某一项F(n)=(BC^(n-2))1

这就是斐波那契数列的矩阵乘法定义.

另矩阵乘法的一个运算法则A¬^n(n为偶数)=A^(n/2)* A^(n/2).

因此可以用递归的方法求得答案.

时间效率:O(logn),比模拟法O(n)远远高效。

代码(PASCAL)

{变量matrix是二阶方阵, matrix是矩阵的英文}

program fibonacci;

type

matrix=array[1..2,1..2] of qword;

var

c,cc:matrix;

n:integer;

function multiply(x,y:matrix):matrix;

var

temp:matrix;

begin

temp[1,1]:=x[1,1]*y[1,1]+x[1,2]*y[2,1];

temp[1,2]:=x[1,1]*y[1,2]+x[1,2]*y[2,2];

temp[2,1]:=x[2,1]*y[1,1]+x[2,2]*y[2,1];

temp[2,2]:=x[2,1]*y[1,2]+x[2,2]*y[2,2];

exit(temp);

end;

function getcc(n:integer):matrix;

var

temp:matrix;

t:integer;

begin

if n=1 then exit(c);

t:=n div 2;

temp:=getcc(t);

temp:=multiply(temp,temp);

if odd(n) then exit(multiply(temp,c))

else exit(temp);

end;

procedure init;

begin

readln(n);

c[1,1]:=1;

c[1,2]:=1;

c[2,1]:=1;

c[2,2]:=0;

if n=1 then

begin

writeln(1);

halt;

end;

if n=2 then

begin

writeln(1);

halt;

end;

cc:=getcc(n-2);

end;

procedure work;

begin

writeln(cc[1,1]+cc[1,2]);

end;

begin

init;

work;

end.

python做斐波那契数列。

直接创建一个类然后调用下面的def函数即可

#斐波那契数列

'''

第一位是1

第二位是1

第三位是2

公式位F(n)=f(n-1)+f(n-2)

'''

def get_Fibonacci_sequence(n):

'''输入n,遍历到第n位的斐波那契数列'''

a,b=0,1

if n>=3:#即等于>2相当于1,2位特殊处理

for i in range(n-1):#操作次数是n-1,去除一次第一位的操作

c=a+b

a,b,=b,c

print(b)#这里选择先改变再输出,可以减少1次的循环

def get_Fibonacci_Num(n):

'''输入n,遍历到第n位的斐波那契数列的第n位数'''

a, b= 0, 1

if n>= 3:#即等于>2相当于1,2位特殊处理

for i in range(n- 1):#操作次数是n-1,去除一次第一位的操作

c= a+ b

a, b,= b, c

#这里选择先改变再输出,可以减少1次的循环

return b

def get_Fibonacci_Num_recursion(n):

'''输入n,遍历到第n位的斐波那契数列的第n位数,递归实现'''

if n==1 or n==2:#特别注意,这里要用逻辑或判断,不能直接用或判断,

return 1

else:

return get_Fibonacci_Num_recursion(n-1)+get_Fibonacci_Num_recursion(n-2)

get_Fibonacci_sequence(11)

print(get_Fibonacci_Num(11))

print(get_Fibonacci_Num_recursion(11))

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

ai哪个版本最稳定 ai软件哪个版本最好用js数组map方法,js中数组的常用方法