介绍
首先介绍一下斐波那契数列,斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)
斐波那契数列指的是这样一个数列:
这个数列从第3项开始,每一项都等于前两项之和。
这里通过python用普通迭代的方法和递归的方法实现求斐波那契数列中的具体第几个数字。
普通迭代方法
相当于是两个指针同时向后移动
print('迭代实现斐波那契数列')
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误')
return -1
while (n-2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n -= 1
return n3
number = int(input('请输入寻找的第几个斐波那契数列对应数据:'))
result = fab(number)
if result != -1:
print('第%d个斐波那契数列对应的数据为%d' % (number, result))
运行结果
递归方法
print('迭代实现斐波那契数列')
def fab(n):
if n < 1:
print('输入有误')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
number = int(input('请输入寻找的第几个斐波那契数列对应数据:'))
result = fab(number)
if result != -1:
print('第%d个斐波那契数列对应的数据为%d' % (number, result))
运行结果
这里如果用递归的话,效率大大降低,耗时比较久
递归算法的时间复杂度:递归的总次数*每次递归的数量
递归算法时间复杂度为(二叉树的节点个数):O(n)=(2^h)-1,那么时间复杂度就是2的n次方