{每日一题}:四种方法实现打印feibo斐波那契数列

刚开始学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

如果你和我有共同爱好,我们可以加个好友一起交流!

 

原文地址:https://www.cnblogs.com/ywk-1994/p/9458062.html