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 然后以此类推下去的 """
标签:f1,数列,斐波,讲解,那列,def From: https://www.cnblogs.com/jsyphp/p/17751785.html