Python学习笔记_斐波那契数列

"""
1、生成100项斐波那契数列
2、求第n项斐波那契数列的值是多少
3、给定终止值,生成此前斐波那契数列
"""

# 求第n项斐波那契数列的值是多少
def Fibonacci(n):

    if n == 1:  # 如果n=1,返回0
        return 0
    elif n == 2:  # 如果n=2,返回1
        return 1
    else:
        return Fibonacci(n-1) + Fibonacci(n-2)  # 通项公式 F(N) = F(N-1) + F(N-2)

# 生成前n项斐波那契数列
def Fibonaccii(n):
    seq = [0,1]  # 初始化列表
    if n == 1:  # n=1,返回[0] 
        return [0]
    elif n == 2:  # n=2,返回[0,1]
        return [0,1]
    else:
        for i in range(n-2): # n>2,循环添加数列到初始列表中
            seq.append(seq[i]+seq[i+1])
        return seq  

# 给定终止值,生成此前斐波那契数列
def Fibonacciii(n):

    seq = [0,1]  # 初始化列表
    i = 0  # 初始i

    if n == 0:  # 如果n=0,返回列表[0]
        return [0]
    else:
        if n <= 3:  # 如果0<n<3
            for i in range(n):  # 循环往初始列表中添加斐波那契数列
                seq.append(seq[i]+seq[i+1])
            return seq
        else:  # 如果n > 3
            while True:  # 理论上当n 不确定时,需要添加的项数也是不确定的,故死循环
                if seq[-1] <= n:  # 一直添加,如果添加的最后一项不大于给定值
                    seq.append(seq[i]+seq[i+1])
                    i += 1  # 每次循环i 递增
                    continue  # 继续循环,不执行以下代码
                break  # 当最后一项大于给定值时,跳出死循环
            return seq[0:-1]  # 最后返回去掉最后一个数值的斐波那契数列

# 求第n项斐波那契数列的值是多少(快速版)
def Fibonaccii(n):
    seq = [0,1]  # 初始列表怕[0,1]
    if n == 1:  # 如果n=1,返回[0]
        return [0]
    elif n == 2:  # 如果n=2,返回[0,1]
        return [0,1]
    else:
        for i in range(n-2):  # 循环往列表中添加数列,初始已有两项故添加项数为n-2
            seq.append(seq[i]+seq[i+1])  # 添加的数列值等于前两项的和
        return seq[-1]  # 取最后一项的值

# 求第n项斐波那契数列的值是多少(终极版)
def Fibonaccii(n):
    a,b = 1,1
    if n == 1 or n == 2:
        return 1
    for i in range(n-2):
        s = a + b
        a,b = b,s
    return s


# 老男孩版本
def Fibonacciiii(arg1,arg2,stop):
    if arg1 == 0:
        print(arg1)
        print(arg2)
    arg3 = arg1 + arg2
    print(arg3)
    if arg3 < stop:
        Fibonacciiii(arg2,arg3,stop)

Fibonacciiii(0,1,1000)

 

posted @ 2020-11-22 23:53  止一  阅读(126)  评论(0编辑  收藏  举报