刚开始学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 + num2 11 count += 1 12 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 请输入要打印的项数:10
20 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 = 0
10 self.num2 = 1
11
12 def __iter__(self):
13 return self
14
15 def __next__(self):
16 if self.counter < self.n:
17 temp = self.num1
18 self.num1, self.num2 = self.num2, self.num1 + self.num2
19 self.counter += 1
20 return temp
21 else:
22 raise StopIteration
23
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 请输入要打印的项数:10
38 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 请输入要打印的项数:10
23 0 1 1 2 3 5 8 13 21 34
24 进程已结束,退出代码 0
如果你和我有共同爱好,我们可以加个好友一起交流!