首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个删除整数奇数的递归函数

创建一个删除整数奇数的递归函数
EN

Stack Overflow用户
提问于 2022-05-26 01:31:43
回答 5查看 77关注 0票数 1

我刚刚开始使用递归函数,我必须创建一个接收整数并返回一个只包含偶数的新数字的函数。例如,如果它接收到23456,它应该返回246。这就是我尝试过的:

代码语言:javascript
运行
复制
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))

但我得到了以下错误:

代码语言:javascript
运行
复制
RecursionError: maximum recursion depth exceeded in __instancecheck__

我该怎么做才能解决这个问题呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-05-26 01:41:34

您的问题是,您没有停止递归的条件--每次对newInt的调用都会导致另一个调用。停止的一种方法是检查n是否小于10,然后返回n (如果是偶数)。例如:

代码语言:javascript
运行
复制
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

注意,我已经修改了函数,使其返回一个整数,而不是一个字符串。

票数 0
EN

Stack Overflow用户

发布于 2022-05-26 01:41:22

你需要一个基本的案子。也不需要将任何整数转换为字符串。下面是解决这两个问题的newInt()的工作版本:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2022-05-26 01:51:21

下面是divmod的一个变体。取消对打印的注释以查看它是如何工作的:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72385727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档