用python实现斐波那契数列的几种方法

简介
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34
在这里插入图片描述
题目的起源
列昂那多·斐波那契于1202年研究兔子产崽问题时发现了此数列。设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡。问:一对兔子一年能繁殖成多少对兔子?

兔子的序列

在这里插入图片描述
在这里插入图片描述

运用python实现的几种方式

一、迭代的方式实现

	#第一种方式
>>> def fab(n):
	a = 1
	b = 1
	c = 1
	if n < 1:
		return -1
	while (n-2) > 0:
		c = a + b
		a = b
		b = c
		#另一种表达方式 c, a, b = a+b, b, c
		n -=1
	return c
>>> print(fab(8))
21

	#第二种方式
>>> def fab(n):
	a = 1
	b = 1
	if n < 1:
		return -1
	while (n-1) > 0:
		a,b = b ,a+b
		n -=1
	return a

>>> print(fab(8))
21

二、递归的方式实现

>>> def fab(n):
	if n <1:
		return -1
	if n==1 or n==2:
		return 1
	else:
		return fab(n-1) + fab(n-2)

	
>>> print(fab(8))
21

三、迭代器的方法实现

from _collections_abc import Iterable
from _collections_abc import Iterator


class Fibonacci():
    def __init__(self,all_num):
        self.nums = all_num
        self.a = 1
        self.b = 1
        self.i = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < self.nums:
            curr = self.a
            self.a, self.b = self.b, self.a+self.b
            self.i += 1
            return curr
        else:
            raise StopIteration

fab = Fibonacci(10)
all_nums = list()
for n in fab:
    all_nums.append(n)
print(all_nums.pop())
all_nums.clear()

>>>55




发布了14 篇原创文章 · 获赞 8 · 访问量 987

猜你喜欢

转载自blog.csdn.net/Atao_tao/article/details/104240105