文章目录
- 一、顺序输出
- 二、利用递归函数实现
- 三、循环
- 四、利用列表实现
- 五、利用reduce实现
- 六、利用生成器实现
- 七、利用魔术方法实现
记录多种方法生成菲波那切数列
一、顺序输出
代码如下:
# 第一种方法 顺序输出# 获取用户输入数据
num = int(input("你需要几项?"))# 第一和第二项
n1 = 1
n2 = 1
count = 2# 判断输入的值是否合法
if num <= 0:print("请输入一个正整数。")
elif num == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")print(n1, ",", n2, end=" , ")while count < num:nth = n1 + n2print(nth, end=" , ")# 更新值n1 = n2n2 = nthcount += 1
结果:
二、利用递归函数实现
代码如下:
# 利用递归函数实现
def fib(x):if x <= 2:return 1else:return fib(x - 2) + fib(x - 1)
n=int(input('请输入n值:'))
for i in range(1, n+1):print(fib(i), end=" , ")
结果:
三、循环
代码如下:
def fib(number):a = 1b = 1n=1while n <= number: # 当斐波那契数小于等于number时结束循环print(a, end=" ", )a, b = b, a + bn=n+1
fib(10)
结果:
四、利用列表实现
代码如下:
# 利用列表实现
inputnum= int(input('请输入数值:'))
a = [1, 1]for i in range(2, inputnum):num = (a[i - 1] + a[i - 2])a.append(num)
print(a)
结果:
五、利用reduce实现
代码如下:
# 利用reduce实现
from functools import reduce
def nihao(prev,b):print(prev)return [ prev[1],prev[0] + prev[1] ]def fib_reduce(n):initial = [0, 1]dummy = range(n)fib_n = reduce(nihao,dummy,initial)return fib_n[0](fib_reduce(10))
结果:
六、利用生成器实现
代码如下:
import sysdef fibonacci(n): # 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n):returnyield aa, b = b, a + bcounter += 1f = fibonacci(10) # f 是一个迭代器,由生成器返回生成while True:try:print(next(f), end=" ")except StopIteration:sys.exit()
结果:
七、利用魔术方法实现
【Python魔术方法】迭代器(iter__和__next):
代码如下:
class Person(object):def __init__(self,xname):self.name = xname# 斐波拉契数列前两个值是固定self.a ,self.b = 0,1# person默认不是可迭代对象,变成一个可迭代对象,必须返回一个迭代器def __iter__(self): # 生成一个斐波拉契数列return self# person就变成一个迭代器def __next__(self):self.a ,self.b = self.b, self.a+self.b # 计算下一个值if self.a > 1000: # 如果出现一个大于1000的数字,退出循环raise StopIterationreturn self.aif __name__ == '__main__':p = Person('张三')for n in p:print(n)
结果: