python语言实现斐波那契数列

来源:互联网 发布:淘宝网韩版式斗篷女装 编辑:程序博客网 时间:2024/06/05 11:34

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)
今天做了一个题目关于斐波那契数列的问题
然后分别用递归方法与迭代方法实现功能:
方法一:

方法一

a=[1,2]for i in range(2,50):        a.append(a[i-1]+a[i-2])#根据斐波纳契数规律        #print(a[i-1]/a[i-2])#查看相邻两数比例是否接近黄金分割比        #print(a)#40000生成杨辉三角左对齐        if(a[i]>40000):            a.pop()#因为a[i]比预期多出来一项,所以要移除最后一项            breakprint(a)#四万以下的斐波纳契数#print((sum(a)+1)//2)#斐波纳契数列中偶数之和##[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 286`实现一:这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618(或者说后一项与前一项的比值小数部分越来越逼近0.618`2.01.51.66666666666666671.61.6251.61538461538461541.6190476190476191.61764705882352941.61818181818181821.61797752808988761.61805555555555561.61802575107296141.61803713527851461.6180327868852461.6180344478216821.61803381340012531.6180340557275541.61803396316670641.61803399852180331.6180339850173581.6180339901755971

实现二:杨辉三角

[0, 1, 1][0, 1, 1, 2][0, 1, 1, 2, 3][0, 1, 1, 2, 3, 5][0, 1, 1, 2, 3, 5, 8][0, 1, 1, 2, 3, 5, 8, 13][0, 1, 1, 2, 3, 5, 8, 13, 21][0, 1, 1, 2, 3, 5, 8, 13, 21, 34][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987][0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]

实现三:斐波那契数列元素中偶数之和
发现该数列中偶数相加,
2+8+34+144…….=2+3+5+34+55…….
受启发得:
偶数和s1,总和s
s1+s1+1=s+2
所以:
s1=(s+1)/2

print((sum(a)+1)//2)#斐波纳契数列中偶数之和
#方法二:def fun(n):    if n==0:        return 0    if n==1:        return 1    return fun(n-1)+fun(n-2)a=[None]*50for i in range(1,50):    if fun(i)<40000:        a[i]=fun(i)    else:        breakprint(a)

方法三:

#方法三def fibo(n):    x, y = 0, 1    while(n):        x,y,n = y, x+y, n - 1    return xa=[0]*50for i in range(1,50):    if fibo(i)<40000:        a[i]=fibo(i)    else:        breakprint(a)
0 0