*算法定义:
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N)【源自百度百科】
**
1、递归实现
def fib_1(i):
if (i <= 0):
return 0;
if (i == 1):
return 1;
temp = fib_1(i - 1) + fib_1(i - 2);
return temp;
效率低,参数越大时间超长。
2、迭代实现(时间复杂库O(n))
def fib_2(i):
initArr = [0, 1]
if (i < 0):
return 0;
if (i < 2):
return initArr[i];
fib_one = 0;
fib_two = 1;
print(1, fib_two)
fib_n = 0;
for temp in range(2, i + 1):
#实现算法 f(n)=f(n-1)+f(n-2)
fib_n = fib_one + fib_two;
print(temp, fib_n)
fib_one = fib_two;
fib_two = fib_n;
return fib_n;
3、迭代实现(减少代码量)
def fib_3(i):
if(i<1):
return 0;
temp = 1
one, two = 0, 1
while temp <= i:
print(temp, two)
# 交换并实现算法 f(n)=f(n-1)+f(n-2)
one, two = two, one + two
temp = temp + 1
return two
4、自定义迭代器实现
class Fib:
def __init__(self):
self.a = 0
self.b = 1
def __iter__(self):
return self;
def __next__(self):
self.a, self.b = self.b, self.a + self.b;
return self.a;
index=0;
fib = Fib();
for x in fib:
index+=1;
if (index > 100):
break;
print(index,x);
运行结果: