刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列
方法一:使用普通函数
1 def feibo(n): 2 """ 3 打印斐波那契数列 4 :param n: 输入要打出多少项 5 """ 6 count = 0 # 定义一个计数器 7 num1, num2 = 0, 1 # 定义前2项 0,1 8 while count < n: 9 print(num1, end=" ")10 num1, num2 = num2, num1 + num211 count += 112 13 14 feibo(10) 结果如下:
0 1 1 2 3 5 8 13 21 34
进程已结束,退出代码 0
方法二:使用递归输出斐波那契数列
1 def recur_feibo(n): 2 """递归函数输出斐波那契数列""" 3 if n <= 1: 4 return n 5 else: 6 return (recur_feibo(n - 1) + recur_feibo(n - 2)) 7 8 9 # 获取用户输入10 total_num = int(input("请输入要打印的项数:"))11 if total_num < 0:12 print("请输入大于0的整数!")13 else:14 for i in range(total_num):15 print(recur_feibo(i),end=" ")16 17 18 结果如下:19 请输入要打印的项数:1020 0 1 1 2 3 5 8 13 21 34 21 进程已结束,退出代码 0
方法三:自己造一个斐波那契数列迭代器
1 class FeiBO(object): 2 """斐波那契数列迭代器""" 3 4 def __init__(self, n): 5 self.n = n 6 self.counter = 0 # 迭代器的指针初始默认指向 0 7 8 # 数列的前两项 0 ,1 9 self.num1 = 010 self.num2 = 111 12 def __iter__(self):13 return self14 15 def __next__(self):16 if self.counter < self.n:17 temp = self.num118 self.num1, self.num2 = self.num2, self.num1 + self.num219 self.counter += 120 return temp21 else:22 raise StopIteration23 24 25 n = int(input("请输入要打印的项数:"))26 27 # 创建迭代器28 feibo = FeiBO(n)29 30 # 使用for 迭代31 fib1 = FeiBO(n)32 for item in feibo:33 print(item, end=" ")34 35 36 结果如下:37 请输入要打印的项数:1038 0 1 1 2 3 5 8 13 21 34 39 进程已结束,退出代码 0
方法四:使用yield实现生成器求斐波那契数列
1 def feibo(n): 2 """使用yield实现生成器求斐波那契数列""" 3 count = 0 # 记录当前迭代的位置,初始值为0 4 num1, num2 = 0, 1 # 初始化数列的前两位值 0,1 5 while count < n: 6 yield num1 7 num1, num2 = num2, num1 + num2 8 count += 1 # 自加一,迭代器指针指向下一个位置 9 10 11 n = int(input("请输入要打印的项数:"))12 13 # 创建生成器,生成器默认是沉睡的,假如是第一次唤醒生成器(函数),则从生成器(函数)的起始位置开始运行14 gen = feibo(n)15 16 # 使用for 迭代17 for item in gen:18 print(item, end=" ")19 20 21 结果如下:22 请输入要打印的项数:1023 0 1 1 2 3 5 8 13 21 34 24 进程已结束,退出代码 0
如果你和我有共同爱好,我们可以加个好友一起交流!