代码 斐波那契数列的讲解过程
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
然后以此类推下去的
"""