用python实现斐波那契数列的5种简单方法,python根据斐波那契数列的定义

  用python实现斐波那契数列的5种简单方法,python根据斐波那契数列的定义

  kwdcdq序列的五种python写法kwdcdq序列(斐波那契序列),又称黄金分割序列,是数学家生动的钢笔kwdcdq(Leonardoda Fibonacci)以兔子育种为例推出的,所以又叫“兔子序列”。指这样一个数列:1,1,2,3,5,8,13,21,34,…数学上,斐波那契数列递归定义如下:F(1)=1,f (2)=1,f (n)=f (n-1) f。

  kwdcdq序列的难点在于算法,如果成为生成元,就需要使用for循环遍历迭代生成元。

  第一种递归方法def fib _ recurr (n): assert n=0, n 0 if n=1:return n return fib _ recurr(n-1)fib _ recurr(n-2)for I in range(1,20): print (fib _ recurr (i),End= )最简洁,但效率最低,重复计算会很多。时间复杂度为O (1.618 n),深度为1000。

  第二种递归方法def fib _ loop (n): a,b=0,1 for I in range(n ^ 1):a,b=b,a b return for I in range(20):print(fib _ loop(I),end= )递归方法是增量法,时间复杂度为o(。

  第三个生成器def fib _ loop _ while (max): a,b=0,1 whilemax0: a,b=b,a b max-=1 yield for I in fib _ loop _ while(10):print(I)带yield的函数都视为生成器,生成器是带

  Python要求迭代器本身是迭代的,所以我们还需要为迭代器实现_ _ iterator _ _方法,而_ _ iterator _ _方法返回一个迭代器。迭代器本身就是迭代器,所以迭代器的_ _ iterator _ _方法返回自身。

  第四个类实现内部魔术方法类Fibonacci(object): KWD CDQ序列迭代器 def _ _ init _ _ (self,n):: param n: int指生成序列的个数 self.n=n #保存当前生成的数据列的哪些数据,生成器中的属性,记录位置, 下一个位置的数据self.current=0 #两个初始值self . a=0 self . b=1 def _ _ next _ _(self): 用next()函数调用时,下一个数字 if self.current self.n: self.a,self.b=self.b,self.a self.b self.current=1返回self . a else:raise stop iteration def __iter__(self): 迭代器的_ _ ITER _ _返回自身。 返回self if _ _ name _ _= _ _ main _ :fib=Fibonacci(15)for num in fib:print(num)for loop的本质是通过不断调用next()函数来实现的。

  对于[1,2,3,4,5]中的x:传递相当于:

  #先获取iterable对象it=ITER ([1,2,3,4,5])# while next while true:try:next(it)except stop iteration:#当遇到停止迭代时,退出循环,破第五矩阵的快幂。

  导入numpy为NP # # # 1 def fib _ matrix(n):for I in range(n):RES=pow((NP . matrix([[1,1],[1,0]],dtype=int64 ),i) * np.matrix([[1],[0]])print(int(RES[0][0])# Call fib _ matrix(50)# # 2 # Calculate kwdcdq sequence def Fibonacci _ matrix _ tool(n):matrix=NP . matrix( 1 1;0 ,dtype= int64) #返回的是矩阵类型returnnp . linalg . Matrix _ power(Matrix,N)def Fibonacci _ Matrix(N):result _ list=[]for I in range(0,N):result _ list . append(NP . array(Fibonacci _ Matrix _ tool(I))[0][0])return result _ list #调用Fibonacci _ Matrix(50)# # pow比double * *,np.linalg.matrix _ power也是一种

  矩阵法O(log n)由科学计算软件包numpy实现。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: