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

Python多种方法生成菲波那切数列,第1张

文章目录
  • 一、顺序输出
  • 二、利用递归函数实现
  • 三、循环
  • 四、利用列表实现
  • 五、利用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)

结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存