рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреБрдЗрдбреЛ рдЦреБрдж рднреА рдЗрд╕рдХреЗ
рд╡рд┐рд░реЛрдзреА рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд ...
рд╕рд░рд▓ рдЙрдкрд╛рдп
class recursion(object): "Can call other methods inside..." def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): result = self.func(*args, **kwargs) while callable(result): result = result() return result def call(self, *args, **kwargs): return lambda: self.func(*args, **kwargs) @recursion def sum_natural(x, result=0): if x == 0: return result else: return sum_natural.call(x - 1, result + x)
рд╡реИрд╕реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:
@recursion def sum_natural_x(x, result=0): if x == 0: return result else: return sum_natural_y.call(x - 1, result + x) @recursion def sum_natural_y(y, result=0): if y == 0: return result else: return sum_natural_x.call(y - 1, result + y) print(sum_natural_x(1000000))
рдпрд╣рд╛рдБ рдкрд╛рдЗрдерди рдореЗрдВ рдПрд░рд▓рдВрдЧ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ)