工作过程中, 把写内容过程中经常用的一些内容做个备份, 如下资料是关于 python 中使用尾递归范例的内容, 应该能对小伙伴有一些好处.
- # This program shows off a python decorator(
- # which implements tail call optimization. It
- # does this by throwing an exception if it is
- # it's own grandparent, and catching such
- # exceptions to recall the stack.
- import sys
- class TailRecurseException:
- def __init__(self, args, kwargs):
- self.args = args
- self.kwargs = kwargs
- def tail_call_optimized(g):
- """
- This function decorates a function with tail call
- optimization. It does this by throwing an exception
- if it is it's own grandparent, and catching such
- exceptions to fake the tail call optimization.
- This function fails if the decorated
- function recurses in a non-tail context.
- """
- f = sys._getframe()
- if f.f_back and f.f_back.f_back and f.f_back.f_back.f_code == f.f_code:
- raise TailRecurseException(args, kwargs)
- else:
- while 1:
- try:
- except TailRecurseException, e:
- args = e.args
- kwargs = e.kwargs
- func.__doc__ = g.__doc__
- return func
- @tail_call_optimized
- def factorial(n, acc=1):
- "calculate a factorial"
- if n == 0:
- return acc
- print factorial(10000)
- # prints a big, big number,
- # but doesn't hit the recursion limit.
- @tail_call_optimized
- def fib(i, current = 0, next = 1):
- if i == 0:
- return current
- else:
- return fib(i - 1, next, current + next)
- print fib(10000)
- # also prints a big number,
- # but doesn't hit the recursion limit.
来源: http://www.bubuko.com/infodetail-2945370.html