斐波那契数列,简单地说,起始两项为0和1,此后的项分别为它的前两项之后。
(注:据我百度发现,斐波那契数列的定义并非起始的两项为0和1,而是1和1,鉴于是转发的,在这里不对原作者的文章进行改动,因为,代码的思想是没有问题的。)
实现方式一:
根据这一特性,可采用最简单的方法计算该项,循环计算每项的值,以下为python实现代码,输出该数列的前num项
# -*- coding:utf-8 -*-
def printFibo(num):
a = 0
b = 1
i = 0
while i < num:
print a
a,b = a, a+b
i += 1
#原作者代码有误
#修改后
def printFibo(num):
a = 1
b = 1
i = 0
while i < num:
print(a)
a,b = b, a+b
i += 1
xxx = printFibo(5)
实现方式二:
考虑到从第三项开始,每一项的值都为前面两项的和,可以使用递归的方法来计算:
def item( num ):
if num == 0 :
res = 0
elif num == 1:
res = 1
else:
res = item ( num - 1) + item (num -2)
return res
def printFibo( no ):
i = 0
while i < no:
print item(i)
i += 1
实现方式三:
以上采用的是递归的实现方式,相比较而言,使用迭代会更加高效,以下函数会返回一个列表:
def fibo(num):
numList = [0,1]
for i in range(num - 2):
numList.append(numList[-2] + numList[-1])
return numList
另外一种方式如下,该函数只返回某一项:
def fibo(n):
x, y = 0, 1
while(n):
x,y,n = y, x+y, n - 1
return x
实现方式三:
采用尾递归的方式来编写
def fibo(n):
def fib_iter(n,x, y):
if n == 0:
return x
else:
return fib_iter(n-1, y, x+y)
return fib_iter(n, 0, 1)