How can the stack space of the class throw an exception so quickly?

import sys
  
class dynamic_regulation_recursion_limit:
     def __init__(self, func):
         self.func = func
         self.Increased_limit = 1000
  
     def __call__(self, *args, **kwargs):
       while True:  
         try:
             return self.func(*args, **kwargs)
         except RecursionError:
             print("x, y= ", *args)
             print("stack= ", len(inspect.stack()))
             print("self.recursionlimit= ", self.recursionlimit)
             print()
             self.recursionlimit = sys.getrecursionlimit() + self.Increased_limit
             sys.setrecursionlimit(self.recursionlimit)
  
@dynamic_regulation_recursion_limit
def testadd(x, y):
     if x==0:
         print(y)
     else:
         return testadd(x-1, y+1)
  
testadd(999, 0) 

the printed results are unexpected to me
x, y = 669330
stack= 665
self.recursionlimit= 1000

x, y = 335664
stack= 1333
self.recursionlimit= 2000

x, y = 2997
stack= 1999
self.recursionlimit= 3000

* * every time I RecursionError, the, len (inspect.stack ()) display is far away from the recursionlimit.
what"s going on? * *

def dynamic_regulation_recursion_limit(func):
     def wrapper(*args, **kwargs):
       while True:  
         try:
             return func(*args, **kwargs)
         except RecursionError:
             print("x, y= ", *args)
             print("stack= ", len(inspect.stack()))
             print("self.recursionlimit= ", sys.getrecursionlimit())
             print()
             recursionlimit = 1000 + sys.getrecursionlimit()
             sys.setrecursionlimit(recursionlimit)
     return wrapper

the functional decorator I wrote at first
turns out to be normal
x, y = 503496
stack= 997
self.recursionlimit= 1000

x, y = 3996
stack= 1997
self.recursionlimit= 2000

rewrite to class decorator

< H1 > the output result does not understand < / H1 >

stack= 665
self.recursionlimit= 1000

stack= 1333
self.recursionlimit= 2000

stack= 1999
self.recursionlimit= 3000

A rule is that an exception is thrown at the limit value 2 / p > 3.

Aug.01,2021
Menu