欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python笔记:fib

程序员文章站 2022-05-30 22:50:24
def my_fib_1(n): #打印比n小的斐波那契数列中的数字 ls = [] a = 0 b = 1 while b <= n: # 这样能保证拿到的都是小于n的 ls.append(b) a,b = b,a+b # ls.append(b)如果放到这,那么拿到的最后一个就是大于n的了 return lsdef my_fib_2(n): #打印n个斐波那契数列中的数字...
def my_fib_1(n):
    #打印比n小的斐波那契数列中的数字
    ls = []
    a = 0
    b = 1
    while b <= n:
        # 这样能保证拿到的都是小于n的
        ls.append(b)
        a,b = b,a+b
        # ls.append(b)如果放到这,那么拿到的最后一个就是大于n的了
    return ls


def my_fib_2(n):
    #打印n个斐波那契数列中的数字
    i,num1,num2 = 1,1,1
    ls = []
    while i <= n:
        # 这样能保证拿到的都是小于n的
        ls.append(num1)
        num1,num2 = num2,num1+num2
        # ls.append(b)如果放到这,那么拿到的最后一个就是大于n的了
        i=i+1
    return ls


# 用列表搞定
def my_fib_3(n):
    ls = []
    for i in range(n):
        if i==0 or i==1:
            ls.append(1)
        else:
            ls.append(ls[i-2]+ls[i-1])
    return ls


# 递归函数,只是返回第n个数
def my_fib_4(n):
    if (n==1) or (n==2):
        return 1
    else:
        return my_fib_4(n-2)+ my_fib_4(n-1)
    #也可以存储到列表里输出,根据具体需求决定



#使用生成器来实现
def my_fib_5(n):
    i,num1,num2 = 1,1,1
    while i<=n:
        yield num1
        num1,num2 = num2,num1+num2
        i=i+1


#终极boss,生成器的升级版本
def my_fib_6(n):
    a,b = 0,1
    while n>0:
        a,b = b,a+b
        n -=1
        yield a


if __name__ == "__main__":
    print(my_fib_1(100))
    print(my_fib_2(10))
    print(my_fib_3(10))
    print(my_fib_4(10))
    print([i for i in my_fib_5(10)])
    print([i for i in my_fib_6(10)])

本文地址:https://blog.csdn.net/JCLWIN2017/article/details/107368047