python - 带有递归数字的Python递归函数

原文 标签 python recursion

最近,我正在练习为“递归函数”编写代码。为此,我正在尝试编写一个称为反向数字的函数,我注意到有很多不同的方法可以做到这一点。使用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


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

还是帮我改进代码?

最佳答案

如果您未明确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(n2)。

相关文章:

java - 递归-为什么使用return语句

python - Python:线程仍在运行

python - cloudant python https连接池?

python - 如何导出和保存链接的Jupyter笔记本?

c - 在这里找不到错误…C代码

python - Python:打印出复杂数据结构的所有值(不包括哈希键)

python - 如何用 flask 扭曲?

python - 如何导出PATH升华构建工具?

list - Prolog-递归调用

javascript - 递归调用javascript函数