最近,我正在练习为“递归函数”编写代码。为此,我正在尝试编写一个称为反向数字的函数,我注意到有很多不同的方法可以做到这一点。使用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
任何人都可以解释为什么?
还是帮助我改进代码?
答案 0 :(得分:2)
如果您未明确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 )。