[关闭]
@Scrazy 2016-11-29T12:27:47.000000Z 字数 514 阅读 828

线性递归

python


几个惊艳的递归!

第一次见到这种方法求和,真是吓了我一跳!

  1. In [10]: def binary_sum(S, lft=None, rgt=None):
  2. ...: if lft is None:
  3. ...: lft = 0
  4. ...: if rgt is None:
  5. ...: rgt = len(S)
  6. ...:
  7. ...: if lft > rgt:
  8. ...: return 0
  9. ...: elif lft == rgt - 1:
  10. ...: return S[lft]
  11. ...: else:
  12. ...: mid = (lft + rgt) // 2
  13. ...: return binary_sum(S, lft, mid) + binary_sum(S, mid, rgt)

高效率的fibonacci seq

  1. In [17]: def good_fib(n):
  2. ...: if n <= 1:
  3. ...: return (n, 0)
  4. ...: else:
  5. ...: (a, b) = good_fib(n-1)
  6. ...: return (a + b, a)

与普通的相比

  1. In [31]: def fib(n):
  2. ...: if n <= 1:
  3. ...: return n
  4. ...: else:
  5. ...: return fib(n-2) + fib(n-1)

good_fib()函数的复杂度为O(n),而fib()函数的复杂度为指数级!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注