Python编程产生斐波那契数列20项(用python写出斐波那契数列)
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)
用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实现斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n=39
????????见到题目很自然联想到用递归或是用数组将前面的结果全部存储起来(这个想法其实和递归没区别),写起来最简单。但实际写出来发现不现实,运行效率太低,提交答案的时候果然提示超出要求时间,程序太过复杂。查阅答案的时候才发现一个很巧妙的方法(主要还是自己太笨了脑筋不会拐弯=.=||),其实F(n)=F(n-1)+F(n-2),也就是说整个运算过程其实只用保存两个数值即可计算出所需结果,并不需要保存前面的全部结果。2个数值,就应该联想到通过模2来存取数值(写到这里愈发觉得自己是个猪头),这样大大提高了效率,降低了存储空间。
? ? ? ? 其次是在实现过程中要注意一个小问题,最开始本猪写的是 for i in range(2,n) ,后来发现答案全错了,原来是因为n=2时, range(2,2) 为0,并不会运算下面的值,所以需要多算一位。
# -*- coding:utf-8 -*-
class Solution:
? ? def __init__(self):
? ? ? ? self.temp_Array = [0,1]
? ? def Fibonacci(self, n):
? ? ? ? if type(n) != int or n = 0:
? ? ? ? ? ? return False
? ? ? ? elif n == 1:
? ? ? ? ? ? return 1
? ? ? ? else:
? ? ? ? ? ? for i in range(2,n+1):
? ? ? ? ? ? ? ? self.temp_Array[i%2] = self.temp_Array[0]+self.temp_Array[1]
? ? ? ? ? ? return self.temp_Array[n%2]
用python函数写斐波那契数列是什么?
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13,特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。
# 判断输入的值是否合法
if nterms = 0:
?print("请输入一个正整数。")
elif nterms == 1:
?print("斐波那契数列:")
?print(n1)
else:
print("斐波那契数列:")
print(n1,",",n2,end=" , ")
while count nterms:
nth = n1 + n2
print(nth,end=" , ")
# 更新值
n1 = n2
n2 = nth
count += 1
平方与前后项
从第二项开始(构成一个新数列,第一项为1,第二项为2,……),每个偶数项的平方都比前后两项之积多1,每个奇数项的平方都比前后两项之积少1。如:第二项 1 的平方比它的前一项 1 和它的后一项 2 的积 2 少 1,第三项 2 的平方比它的前一项 1 和它的后一项 3 的积 3 多 1。