编程产生斐波那契数列20项python(编写程序斐波那契数列)
用Python输出斐波那契数列的前20项,要用递归和非递归两种方法?
?斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n=2,n∈N*)
用python求斐波数列的前20项
斐波拉契数列的通项公式:
第2n+1项是:
1/√5〔
(√5+1)2??1/2
+(√5-1)2??1/2〕
第2n项是:
1/√5〔
(√5+1)2?/2
-(√5-1)2?/2〕
(n=0,1,2,3……)
其实此数列的前20项还是用递推方式比较容易:
0,1,1,2,3,5,
8,13,21,34,55,89,144,233,
377,610,987,
1597,2584,4181。
Python 求斐波那契数列前20项和
定义:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
方法一:用递归方法求出每一项
def?fib1(n):
????if?n?==?0:
????????return?0
????elif?n?==?1:
????????return?1
????else:
????????return?fib1(n?-?1)?+?fib1(n?-?2)
res?=?[]
for?i?in?range(21):
????res.append(fib1(i))
print?res
print?sum(res)
方法二:上面的方法,有很多重复计算,非常消耗性能,下面改进下:
known?=?{0:?0,?1:?1}
def?fib2(n):
????if?n?in?known:
????????return?known[n]
?
????res?=?fib2(n?-?1)?+?fib2(n?-?2)
????known[n]?=?res
????return?res
res?=?[]
for?i?in?range(21):
????res.append(fib2(i))
print?res
print?sum(res)