• {每日一题}:四种方法实现打印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

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

     

  • 相关阅读:
    洛谷
    洛谷
    洛谷
    模板
    洛谷
    洛谷
    Codeforces Round #561 (Div. 2) E. The LCMs Must be Large(数学)
    Codeforces Round #561 (Div. 2)
    Mail.Ru Cup 2018 Round 2 C. Lucky Days(拓展欧几里得)
    The 10th Shandong Provincial Collegiate Programming Contest H.Tokens on the Segments(贪心+优先级队列 or 贪心+暴力)
  • 原文地址:https://www.cnblogs.com/ywk-1994/p/9458062.html
Copyright © 2020-2023  润新知