【问题标题】:How to modify this Python function to use recursion如何修改此 Python 函数以使用递归
【发布时间】:2017-05-15 22:41:55
【问题描述】:

我有一个简单的函数,它打破一个数字,如@9​​87654321@,并返回这两个数字的总和(即9)。我也在研究递归,我想知道下面的代码是否符合标准。为什么?或为什么不?如果不是,我如何使用递归范式解决这个简单的问题?

def sumnum(n):
    n = str(n)
    a = []
    for i in n:
        a.append(i) 
    sum(int(n) for n in a)
sumnum(54)
9

【问题讨论】:

  • def sumnum(n): return (sumnum(n // 10) + n % 10) if n else 0
  • 递归意味着一个函数调用自己。 sumnum 会调用自己吗?这将回答您关于为什么或为什么不是递归的问题。

标签: python algorithm recursion


【解决方案1】:

您使用的代码不是递归的。递归有两个主要特征:基本情况和递归。

现在,让我们分解您的问题:

基本情况:

假设我们有一个小于 10 的数字。那么我们将返回这个数字。让我们把它作为我们的基本案例。

递归:

如果我们有一个数字 ...xyzxyz 作为数字),我们将取最后一个数字,加上剩下的数字的最后一个数字,直到我们得到一个小于10.

代码:

def sumnum (n):
    if n < 10:
        return n
    return n % 10 + sumnum(n // 10)

【讨论】:

  • 请注意在您对递归的解释中巧妙地使用递归...
  • @mkrieger1 确实是有意的
  • 我想知道投反对票的原因,以便改进答案
  • 这里sumnum的使用完全是可选的,为什么这是最优解
  • 更优雅的基本情况是if n == 0: return 0。任何更大的数字都会减少到这一点;具体来说,0 &lt; n &lt; 10 将导致 n // 10 == 0
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多