【问题标题】:Python recursive function with print reverse digits具有打印反向数字的Python递归函数
【发布时间】:2018-09-29 19:19:43
【问题描述】:

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

谁能解释为什么?

或者帮我改进代码?

【问题讨论】:

  • 是的,当你 print 某些东西 not 意味着函数会返回那个东西,所以如果你想显示步骤,你需要两个 printreturn

标签: python recursion


【解决方案1】:

如果你没有明确地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).

【讨论】:

  • 非常感谢,但我还有一个问题是它会从 21、321 到 4321 打印 3 次,我们如何使用递归函数只获得一次 4321。我尝试删除一些东西,但它不起作用。
  • @neilissac:去掉外调用(最后一行)中的print(..),因为这样会得到结果,然后重印。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多