首页 > 解决方案 > 通过递归仅获取数字中的奇数位

问题描述

所以我的问题是我有一个像 123 这样的数字,并且倾斜 sugests 我希望结果是 13。

问题是,首先使用 im 的方法我会得到反转结果(例如 31),其次我在最后得到一个不应该存在的零,而不是加入数字,而是将它们相加,我不明白为什么。顺便说一句,我不能使用字符串

所以澄清一下:

我的输出:

>>> apenas_digitos_impares(123)
40

正确的输出:

>>> apenas_digitos_impares(123)
13

程序:

def apenas_digitos_impares(n):
    if n == 0:
        return 0
    elif (n%10)%2 == 0:
        return apenas_digitos_impares(n//10)
    elif (n%10)%2 == 1:
        return 10*(n%10) + apenas_digitos_impares(n//10)


标签: pythonrecursion

解决方案


看看最后一行的操作,如果它是奇数,你得到最后一个数字,然后将它乘以 10 并将其添加到下一次调用的递归结果中,我相信这就是它不起作用的原因,试试下面的代码,here您总是在末尾附加最后一位数字,因此最终数字的顺序正确。

def apenas_digitos_impares(n):
    if n == 0:
        return 0
    elif (n % 10) % 2 == 0:
        return apenas_digitos_impares(n // 10)
    elif (n % 10) % 2 == 1:
        return 10 * apenas_digitos_impares(n // 10) + (n % 10)

推荐阅读