python实现斐波那契数列的几种方法

385 阅读2分钟
python实现斐波那契数列的几种方法


不久前,我们学习了迭代器, 其中有个练习:我们想要通过for...in...循环来遍历迭代斐波那契数列中的前n个数,要求用迭代器实现。

斐波拉契数列(Fibonacci),简单地说,数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...



迭代器实现方式如下:


class
Fibonacci(
object
):
def
__init__
(
self
, n):
self
.n = n
self
.a =
0
self
.b =
1
self
.current_num =
0

def
__next__
(
self
):
if
self
.current_num <
self
.n:
num =
self
.a
self
.a,
self
.b =
self
.b,
self
.a +
self
.b
self
.current_num +=
1
return
num
else
:
raise
StopIteration

def
__iter__
(
self
):
return
self
fib = Fibonacci(
10
)
for
temp
in
fib:
print
(temp)

现在我们来探讨下,除了上述方法的其他实现方法:

实现方法一:
根据斐波那契数列的特性,我们可以用最简单的循环遍历以及变量的值交换的方法实现,代码如下:

def
fibonacci
(num):

a, b, i =
0
,
1
,
0
while
i < num:
print
(a)
a, b = b, a+b
i +=
1

fibonacci(
10
)

实现方法二:
考虑到从第三项开始,每一项的值都为前面两项的和,可以使用递归的方法来计算:

def
fibonacci(n):
if
n <
2
:
return
n
else
:
return
fibonacci(n-
1
) + fibonacci(n-
2
)

for
i
in
range
(
10
):
print
(fibonacci(i))

实现方法三:
生成器实现。生成器是一种特殊的迭代器,前面说到迭代器的实现方法,那么我们也可以用生成器来实现,而且生成器比迭代器代码更加简洁:

def
fibonacci(n):
i =
0
a, b =
0
,
1
while
i < n:
yield
a
a, b = b, a + b
i +=
1

fib = fibonacci(
10
)
for
temp
in
fib:
print
(temp)


实现斐波那契数列的方法有很多,以上仅仅是我个人在平时的一个总结,欢迎大家 列出你们的方法

更多免费技术资料可关注:annalin1203