代码 斐波那契数列的讲解过程

python案例

解释的有点不好,多多包含

def f1(n):
    if n<=2:
        return 1;
    else:
        return f1(n-1)+f1(n-2)

# print(f1(6))
"""
    示例1
    解释一下他是如何等8的,递归不是直接返回值再去传递给自身函数,比如n=4的时候,那么f1(4-1)+f1(4-2) = f1(3)+f1(2)不是等5再传递给函数的
    他是先算出f1(n) = 多少,然后后面才知道f1(6)的值是多少
    比如:
        print(f1(6)) 
        "return f1(n-1)+f1(n-2)"

        f1(6-1) + f1(6-2) => f1(5) + f(4)
        
        f1(5-1) + f1(5-2) => f1(4) + f(3)

        f1(4-1) + f1(4-2) => f1(3) + f(2)

        f1(3-1) + f1(2-2) => f1(2) + f(0)

        这里的f1(0,1,2)都是等于1的,我们知道斐波那列的公式是第一位加第二位等第三位,所以,(f1(1) = 1 + f1(2) = 1) = f1(3) = 1 + 1 = 2  f1(3)就等2
        现在我们知道f1(3) 是等"2"了,然后 就可以计算出 f1(4)了  f1(4)就是等于f1(4) = f1(3) + f1(2) ,已知 f1(3)的值等2 ,f1(2)的值等1 所以 f1(4) = f1(3)=>2 + f1(2)=>1 = 3,所有f1(4)的值=3
        现在知道f1(1)=1 , f1(2)=1 , f1(3)=2, f1(4)=3 
        就可以算出f1(4,5,6,7,8)了,程序是这样算的,我反正脑子转不过来总是以为是携带返回值然后再去传递函数。。。
"""

def f2(n):
    if n<=2:
        return 1;
    
    a = 1
    b = 1
    c = 0
    #这里为什么从第二个循环开始,是因为这个公式的前2个数是1,1 那么就不需要计算他,如果你输入n=3就循环1次,输入4就循环2次,以此类推
    for i in range(2, n):
        print("n的数值是:",format(i))
        # a , b = b, (a+b) % 1000000007
        c = (a + b) % 1000000007
        a = b
        b = c
        
    return c
print(f2(7))
"""
    示例2
        这个是用循环计算出来的
        已知a = 1 b = 1 ,c 的值不用管,依次循环5次,
        第一次循环:
            c = a + b = 1 + 1 = 2 那么c现在等2
            a = b = 1 ,因为这才是第一次循环,拿的值是上面b的变量值,
            b = c = 2 ,上面计算的a+b就是等c的值,现在注意,C是不是等2,A是不是等1,B是不是等2,所以
        再次第二次循环:
            已知上面循环的C=2,A=1,B=2,这里的C不用管它,计算a+b的C才是有用的,
            那么计算公式就是
                c = a + b = 1 + 2 = 3,现在C等3了
                a = b = 2,B等于上面第一次循环B=C的值就是等2
                b = c = 3  所以现在B又等于现在a+b的值,C = 3 ,A = 2 ,B = 3
        再次循环
            知道上面的C = 3 ,A = 2 ,B = 3
            C = a + b = 2 + 3 = 5
            a = b = 3
            b = c = 5
        再次循环
            知道上面的C = 5 ,A = 3 ,B = 5
            C = a + b = 3 + 5 = 8
            a = b = 5
            b = c = 8
        再次循环
            知道上面的C = 8 ,A = 5 ,B = 8
            C = a + b = 5 + 8 = 13
            a = b = 8
            b = c = 13
        然后以此类推下去的    

"""

 

posted @ 2023-10-09 15:04  亚索会代码  阅读(28)  评论(0编辑  收藏  举报