代码示例
"""<br>目标:计算斐波那契数列<br>继续理解函数的值传递,函数的返回值<br>"""<br><br># 循环<br>def loop_feibo(n: int):<br> """<br> 循环模式计算<br> :param n:<br> :return:<br> """<br> a, b = 1, 1<br> if n == 1 or n == 2:<br> return b<br> else:<br> while n > 2:<br> a, b = b, a+b<br> n -= 1<br> return b<br><br># 递归<br>def feibo(n: int, a=1, b=1):<br> """<br> 计算第n个斐波那契数 1 1 2 3 5 8 13 21..<br> :param n:<br> :return:<br> """<br> if n == 1 or n == 2:<br> return b<br> else:<br> a, b = b, a+b<br> return feibo(n-1, a, b)<br><br><br>"""<br>递归执行步骤<br><br>def feibo(5: int, a=1, b=1):<br> if 5 == 1 or 5 == 2:<br> return b<br> else:<br> a, b = 1, 1+1<br> return feibo(n-1, a, b) # feibo(5-1, 1, 1+1) -> feibo(n=4, a=1, b=2) ; 最外层函数结束,返回值返回给递归函数调用方<br><br>def feibo(4: int, a=1, b=2):<br> if 4 == 1 or 4 == 2:<br> return b<br> else:<br> a, b = 2, 1+2<br> return feibo(n-1, a, b) # feibo(4-1, 2, 3) -> feibo(n=3, a=2, b=3) ; b = 5<br><br><br>def feibo(3: int, a=2, b=3):<br> if n == 1 or n == 2:<br> return b<br> else:<br> a, b = 3, 2+3<br> return feibo(n-1, a, b) # feibo(3-1, 3, 5) -> feibo(n=2, a=3, b=5) ; 此时n=2,向上return返回值 b=5<br> <br><br>def feibo(n: int, a=1, b=1):<br> if n == 1 or n == 2:<br> return b<br> else:<br> a, b = b, a+b<br> return feibo(n-1, a, b)<br><br><br>ret = feibo(5)<br>"""<br><br><br># 通过yield 生成器,生成1~n个非波那契数列<br>def feibo_yield(n: int):<br> a, b = 1, 1<br> if n == 1:<br> yield 1<br> else:<br> yield from (1, 1)<br> while n > 2:<br> a, b = b, a+b<br> yield b<br> n -= 1<br><br><br><br><br>if __name__ == '__main__':<br> ret = loop_feibo(8)<br> print(ret)<br><br> ret = feibo(8)<br> print(ret)<br><br> ret = feibo_yield(8)<br> print(list(ret))