example03.py 911 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. """
  2. 递归(recursion)
  3. """
  4. def fac(num):
  5. """求阶乘"""
  6. if num in (0, 1):
  7. return 1
  8. return num * fac(num - 1)
  9. # 动态规划 - 把求解问题的中间结果保存起来
  10. # 这种算法适合求解有最优子结构的问题或子问题会重复求解的问题
  11. def fib(num, temp={}):
  12. """计算斐波拉切数"""
  13. # 递归的两个要素
  14. # 收敛条件 - 什么时候结束递归
  15. if num in (1, 2):
  16. return 1
  17. # 递归公式 - 降低问题的求解难度
  18. try:
  19. return temp[num]
  20. except KeyError:
  21. temp[num] = fib(num - 1) + fib(num - 2)
  22. return temp[num]
  23. def fib2(total):
  24. """斐波拉切数列生成器"""
  25. num1, num2 = 0, 1
  26. for _ in range(total):
  27. num1, num2 = num2, num1 + num2
  28. yield num1
  29. def main():
  30. """主函数"""
  31. for num in fib2(120):
  32. print(num)
  33. if __name__ == '__main__':
  34. main()