我刚刚开始使用递归函数,我必须创建一个接收整数并返回一个只包含偶数的新数字的函数。例如,如果它接收到23456,它应该返回246。这就是我尝试过的:
def newInt(n):
dig = n % 10
if dig % 2 == 1:
return newInt(n//10)
elif dig % 2 == 0:
return str(n) + newInt(n//10)
print(newInt(32))但我得到了以下错误:
RecursionError: maximum recursion depth exceeded in __instancecheck__我该怎么做才能解决这个问题呢?
发布于 2022-05-26 01:41:34
您的问题是,您没有停止递归的条件--每次对newInt的调用都会导致另一个调用。停止的一种方法是检查n是否小于10,然后返回n (如果是偶数)。例如:
def newInt(n):
if n < 10:
return n if n % 2 == 0 else 0
dig = n % 10
if dig % 2 == 1:
return newInt(n//10)
elif dig % 2 == 0:
return newInt(n//10) * 10 + dig注意,我已经修改了函数,使其返回一个整数,而不是一个字符串。
发布于 2022-05-26 01:41:22
你需要一个基本的案子。也不需要将任何整数转换为字符串。下面是解决这两个问题的newInt()的工作版本:
def newInt(n):
if not n:
return 0
dig = n % 10
if dig % 2 == 1:
return newInt(n // 10)
else:
return 10 * newInt(n // 10) + dig发布于 2022-05-26 01:51:21
下面是divmod的一个变体。取消对打印的注释以查看它是如何工作的:
def newInt(n):
d,r = divmod(n,10)
# print(n,d,r)
if d == 0:
return 0 if r%2 else r
if r % 2:
return newInt(d)
else:
return 10*newInt(d)+r
print(newInt(212033450))输出:22040
https://stackoverflow.com/questions/72385727
复制相似问题