python - 具有打印反向数字的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
任何人都可以解释为什么?
或者帮我改进代码?
解决方案
如果您没有明确说明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 )。
推荐阅读
- c# - 创建 queueTrigger Azure 函数时出错
- java - 在 Spring Boot 中将输入键附加到 JSON 输出响应
- sharepoint - Sharepoint - 如何在状态更改时对列进行条件日期标记
- javascript - 未处理的拒绝(TypeError):“instanceof”的右侧不是 JSZip.loadAsync(f) 的可调用错误
- javascript - 在javascript中使用map函数递归
- excel - 在单元格中使用 VBA 输入公式
- r - 如何在 R 中读取 .nodes 文件
- flutter - 在运行时出现此错误“用于空值的空检查运算符”
- java - 如何在 Spring Boot 上测试 javax.validator?
- perl - 为什么 T::fn2 在使用两个参数调用时只有一个参数?