美文网首页Python
使用python计算斐波那契数列

使用python计算斐波那契数列

作者: 马拉松Mara | 来源:发表于2017-01-11 11:26 被阅读315次

    定义

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、
    因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子
    (假定每对大兔每月能生产一对小兔,而每对小兔生长两个月就成为大兔,一年后可以繁殖成多少对兔子?)
    而引入,故又称为“兔子数列”。
    指的是这样一个数列:1、2、3、5、8、13、21、34、……
    在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=2, F(n)=F(n-1)+F(n-2)(n>2,n∈N*)
    在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,
    为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,
    用于专门刊载这方面的研究成果。


    斐波那契螺旋线.jpg

    python代码

    废话不说,直接上代码

    # -*- coding: utf-8 -*-
    def fib(max):
        # 默认input是str类型
        max = int(max)
        n,a,b = 1,0,1
        # max:求几个斐波那契数
        while(n <= max):
            print(b)
            # 这一步很关键   f(n) = f(n-1) + f(n-2)
            # 1 1 2 3 5 8 
            t = (b,a+b)     
            a = t[0]
            b = t[1]
            n += 1
        return 'done'
    
    print('求斐波那契前N个数?请输入N:')    
    max = input()
    fib(max)
    

    赋值语句简化

    其中

    t = (b,a+b)     
    a = t[0]
    b = t[1]
    

    可以简化为:

    a,b = b,a+b
    

    改进后的完整代码为:

    # -*- coding: utf-8 -*-
    def fib(max):
        # 默认input是str类型
        max = int(max)
        n,a,b = 1,0,1
        # max:求几个斐波那契数
        while(n <= max):
            print(b)
            # 这一步很关键   f(n) = f(n-1) + f(n-2)
            # 1 1 2 3 5 8 
            a,b = b,a+b
            n += 1
        return 'done'
    
    print('求斐波那契前N个数?请输入N:')    
    max = input()
    fib(max)
    

    使用生成器进行改造

    上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了

    # -*- coding: utf-8 -*-
    def fib(max):
        # 默认input是str类型
        max = int(max)
        n,a,b = 1,0,1
        # max:求几个斐波那契数
        while(n <= max):
            yield b
            # 这一步很关键   f(n) = f(n-1) + f(n-2)
            # 1 1 2 3 5 8 
            a,b = b,a+b
            n += 1
        return 'done'
    
    print('求斐波那契前N个数?请输入N:')    
    max = input()
    g = fib(max)
    print('使用python生成器获取斐波那契前%s个数:' %max)
    for n in g:
        print(n)
    

    参考:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

    相关文章

      网友评论

        本文标题:使用python计算斐波那契数列

        本文链接:https://www.haomeiwen.com/subject/ewtrbttx.html