斐波那契数列又称费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数、斐波那契数列、费氏数列、黄金分割数列。在西方,首先研究这个数列的是比萨的列奥那多(意大利人斐波那契Leonardo Fibonacci(1175-1250)),斐波那契在1202年著的《计算之书》中描述了该数列。(百度百科)
在数学上,以递归的形式来定义这个数列。
F0 = 0F1 = 1Fn = Fn-1 + Fn-2 (n≥2)
也就是说,该数列的第0项是0,第1项是1,从第2项开始,每项都是前两项的和。
很多教科书中在描述该问题时都是从第1项开始的,也就是说:
F1 = 1F2 = 1Fn = Fn-1 + Fn-2 (n≥3)
下面给出再Python中的实现方法:
1、列表版
N = 40 #输出项数
fn = [1,1] #定义前两项
i = 2 #从第3项开始计数
# 循环赋值
while i < N:
fn.append(fn[ i - 1 ] + fn[ i - 2 ]) # 每项是前两项的和
i += 1 #循环变量递增
for e in fn: # 迭代输出列表中的每一项
print(e)
输出结果(结果较长,这里省略了中间的项):
1
2、变量版
1
2
3
5
8
13
21
...
24157817
39088169
63245986
102334155
f1 = 1 # 第1项
f2 = 1 # 第2项
i = 2 # 从第3项开始循环
N = 40 / 2 #因为每次输出两项,所以除以2
# 每次输出两项,因为在循环开始时输出
# 会造成最后两项不会输出,所以这里要+1
while i <= N + 1:
print(f1,",",f2)
f1 = f1 + f2 # 第n项
f2 = f1 + f2 # 第n + 1项
i += 1 # 循环计数+1
输出结果:
1 , 1
3、简洁版
2 , 3
5 , 8
13 , 21
34 , 55
89 , 144
233 , 377
610 , 987
1597 , 2584
4181 , 6765
10946 , 17711
28657 , 46368
75025 , 121393
196418 , 317811
514229 , 832040
1346269 , 2178309
3524578 , 5702887
9227465 , 14930352
24157817 , 39088169
63245986 , 102334155
f1,f2 = 0, 1
N = 40
i = 2
while i <= N + 1:
print (f2, end = ' ')
f1,f2 = f2, f1 + f2
这个算法会把所有的项输出到一行中,每个用空格隔开。
输出结果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155
4、控制每行输出的数量
f1,f2 = 0,1
N = 40
i = 2
j = 0
num_per_row = 5
while i <= N + 1:
print(f2,end = ' ')
j += 1
if j % num_per_row == 0:
print('/n',end = '')
f1,f2 = f2, f1 + f2
i += 1
输出结果:
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465
14930352 24157817 39088169 63245986 102334155
5、使用函数输出第n项
def Fibonacci(n):
if n < 0:
raise IndexError('参数不能小于0。')
if n == 0:
return 0
elif n <= 2:
return 1
else:
return Fibonacci(n - 1) + Fibonacci(n - 2)
v = Fibonacci(30)
print(v)
输出结果:
832040
以上介绍了Python中计算Fibonacci数列的相关算法,如有不妥之处,请留言评论。
新闻热点
疑难解答