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

谁能解释一下为什么?

或者帮助我改进代码?

最佳答案

如果您没有明确返回某些内容,Python 中的函数将返回None。在第二个实现中,您打印某个表达式的结果,但在该代码路径中,您返回它。

您可以通过以下方式解决此问题:

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

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).

关于Python递归函数,打印反向数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52566533/

相关文章:

python - 带有 if 语句的函数中的全局变量

Java如何迭代递归地查找链表中的值

java - 如何将解决方案从递归方法调用传递到调用方法? (回溯算法)

Python - Tkinter : error saying my index is out of range, 当有

python - urlencode 值数组

Python numpy - 随机数的再现性

python - Pandas 计数跨行的值大于不同列中的另一个值

javascript - 无法使用 $.Deferred() 对象和 $.then() 中断递归

javascript - 未命名函数 JavaScript 的递归函数调用

c - 返回后的函数 kepps(递归 C)