Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. def trisum(n, csum):
  2. if n == 0:
  3. return csum
  4. else:
  5. return trisum(n - 1, csum + n)
  6.  
  7. print(trisum(1000, 0))
  8.  
  9. >>> def trisum(n, csum):
  10. ... while True: # change recursion to a while loop
  11. ... if n == 0:
  12. ... return csum
  13. ... n, csum = n - 1, csum + n # update parameters instead of tail recursion
  14.  
  15. >>> trisum(1000,0)
  16. 500500
  17.  
  18. lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
  19.  
  20. lambda f: (lambda x: x(x))(lambda y: f(lambda *args: lambda: y(y)(*args)))
  21.  
  22. def bet(func):
  23. b = (lambda f: (lambda x: x(x))(lambda y:
  24. f(lambda *args: lambda: y(y)(*args))))(func)
  25. def wrapper(*args):
  26. out = b(*args)
  27. while callable(out):
  28. out = out()
  29. return out
  30. return wrapper
  31.  
  32. >>> from recursion import *
  33. >>> fac = bet( lambda f: lambda n, a: a if not n else f(n-1,a*n) )
  34. >>> fac(5,1)
  35. 120
  36. >>> fibo = bet( lambda f: lambda n,p,q: p if not n else f(n-1,q,p+q) )
  37. >>> fibo(10,0,1)
  38. 55
  39.  
  40. >>> bet( lambda f: lambda n: 42 if not n else f(n-1) )(50000)
  41. 42
  42.  
  43. def bet1(func):
  44. def wrapper(*args):
  45. out = func(lambda *x: lambda: x)(*args)
  46. while callable(out):
  47. out = func(lambda *x: lambda: x)(*out())
  48. return out
  49. return wrapper
  50.  
  51. class _RecursiveCall(Exception):
  52. def __init__(self, *args):
  53. self.args = args
  54. def _recursiveCallback(*args):
  55. raise _RecursiveCall(*args)
  56. def bet0(func):
  57. def wrapper(*args):
  58. while True:
  59. try:
  60. return func(_recursiveCallback)(*args)
  61. except _RecursiveCall as e:
  62. args = e.args
  63. return wrapper
  64.  
  65. >>> f = bet0( lambda f: lambda n: (lambda x: x) if not n else f(n-1) )
  66. >>> f(5)(42)
  67. 42
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement