在Python中递归实现位数

在Python中递归实现位数,python,recursion,Python,Recursion,我有这段代码,可以根据输入的位数(例如printNum1(2)将输出10-99,printNum1(3)将输出100-999,printNum1(4)将输出1000-9999)以python迭代方式打印数字: from time import time def printNum1(n): start = time() y = 10 ** n x = y//10 for i in range(x, y): print(i) print(f"

我有这段代码,可以根据输入的位数(例如printNum1(2)将输出10-99,printNum1(3)将输出100-999,printNum1(4)将输出1000-9999)以python迭代方式打印数字:

from time import time
def printNum1(n):
    start = time()
    y = 10 ** n
    x = y//10

    for i in range(x, y):
        print(i)
    print(f"For number {n}\nSol took: {time() - start} seconds")
printNum1(5)
我现在尝试递归地实现它以供练习:

from time import time
from sys import setrecursionlimit
class PrintNumRec:
    setrecursionlimit(1000000000)
    def rec(self, x, y):
        if x == y:
            return
        else:
            print(x)
            return self.rec(x + 1, y)

    @staticmethod
    def init(n):
        start = time()

        y = 10 ** n
        x = y//10

        self = PrintNumRec()
        PrintNumRec.rec(self, x, y)
        print(f"For number {n}\nRecursive took: {time() - start} seconds")


PrintNumRec.init(10)
最初我得到的是:

RecursionError: maximum recursion depth exceeded while calling a Python object
我看过这篇文章

在这篇文章中,我试图将递归限制设置得更高,但我的程序冻结了任何大于4的数字,我得到了以下结果:

Process finished with exit code -1073741571 (0xC00000FD)

有没有什么方法可以在Python中递归地实现这一点,或者我应该坚持迭代的方式?

迭代的方法将会更快、更容易。范围很容易计算为
10**(n-1)
10**n-1
,因此在每次递归调用中不断计算
x+1
并检查
x==y
将非常缓慢。通常,当您遇到递归错误时,这意味着您有一个无限递归。尝试通过打印变量来跟踪变量,看看该数字是否有意义。@YacineMahdid我通过了调试器,它工作正常,没有错误,但对1000的数字执行此操作无法达到目的。