在Python中递归实现位数
我有这段代码,可以根据输入的位数(例如printNum1(2)将输出10-99,printNum1(3)将输出100-999,printNum1(4)将输出1000-9999)以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"
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的数字执行此操作无法达到目的。