栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python多种方法生成菲波那切数列

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python多种方法生成菲波那切数列

文章目录
  • 一、顺序输出
  • 二、利用递归函数实现
  • 三、循环
  • 四、利用列表实现
  • 五、利用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 + n2
        print(nth, end=" , ")
        # 更新值
        n1 = n2
        n2 = nth
        count += 1

结果:

二、利用递归函数实现

代码如下:

# 利用递归函数实现
def fib(x):
    if x <= 2:
        return 1
    else:
        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 = 1
    b = 1
    n=1
    while n <= number:	# 当斐波那契数小于等于number时结束循环
        print(a, end=" ", )
        a, b = b, a + b
        n=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 sys


def fibonacci(n):  # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1


f = 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 StopIteration
        return  self.a

if __name__ == '__main__':
    p = Person('张三')

    for n in p:
        print(n)

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号