首页 > 解决方案 > 具有打印反向数字的Python递归函数

问题描述

最近,我正在练习为“递归函数”编写代码。这个,我正在尝试编写一个称为反向数字的函数,我注意到有很多不同的方法可以做到这一点。当我使用 return 时,我的代码在 IDLE 中工作。例如:

def reverse_digits(num):
if num < 10:
    return num
else:
    return str(num%10) + str(reverse_digits(num//10))
print(reverse_digits(1234))

但是,我想在递归函数中打印结果,例如,

def reverse_digits(num):
if num < 10:
    return num
else:
    print(str(num%10) + str(reverse_digits(num//10)))
reverse_digits(1234)

我会得到

21
3None
4None

任何人都可以解释为什么?

或者帮我改进代码?

标签: pythonrecursion

解决方案


如果您没有明确说明return,Python 中的函数将返回None. 在您的第二个实现中,您print是某个表达式的结果,但在该代码路径中,您不会返回它。

您可以使用以下方法解决此问题:

def reverse_digits(num):
    if num < 10:
        return num
    else:
        res = str(num%10) + str(reverse_digits(num//10))
        print(res)
        return res

print(reverse_digits(1234))

所以我们计算它,然后返回它。

请注意,留在int域中会更有效,而不是进行各种字符串处理,因此可以像这样实现它:

def reverse_digits(num, rem = 0):
    if not num:
        return rem
    else:
        return reverse_digits(num // 10, 10 * rem + (num % 10))

鉴于所有算术都可以在恒定时间内完成,这将导致O(n)算法,而前者通常需要O(n 2 )


推荐阅读