【问题标题】:Don't know how to return the final result of a recursion loop [duplicate]不知道如何返回递归循环的最终结果 [重复]
【发布时间】:2020-10-17 11:49:20
【问题描述】:

我正在解决一个涉及递归的 Codewars 问题,我以前从未真正做过,但有点理解这个概念。我不是很擅长数学,所以它可能解释了为什么我不能解决这个问题。本质上我认为我做了正确的循环我只是不知道如何打印最终值。无论如何,这是我的代码:

def digital_root(n):
    newn = 0
    list = [int(x) for x in str(n)]
    if len(list) >= 2:
        for i in range(len(list)):
            newn += list[i]
        digital_root(newn)
    return n

print(digital_root(1234) 

输出:

1234

【问题讨论】:

  • 内部调用的结果必须由外部函数显式returned。
  • @MichaelButscher 谢谢您的回复。我知道我应该这样做,但我真的不知道。我尝试将 newn 设为全局,但出现 typeval 错误
  • 递归调用函数返回结果与调用任何其他函数返回结果的方式相同
  • 您应该在问题中显示替代尝试和完整的错误消息。

标签: python recursion


【解决方案1】:
def digital_root(n):
    newn = 0
    list = [int(x) for x in str(n)]
    if len(list) >= 2:
        for i in range(len(list)):
            newn += list[i]
        return digital_root(newn) # You need to return it over here
    return n

print(digital_root(1234))

【讨论】:

  • 这会再次输出1234...
  • @r_33 没有这个输出 1
  • 嗯等等,我不明白为什么会再次发生这种情况。当您写return digital_root(newn) 时,该输出会返回到哪里?
  • 然后它将返回将由digital_root(newn) 获得的值,例如在 1234 中,它首先求和 1+2+3+4 = 10,然后再求和 1+0 = 1 并返回最终值即 1
  • 哦,我明白了。谢谢你。我解决这个问题的方式是一种糟糕/愚蠢的方式吗?
猜你喜欢
  • 2017-11-07
  • 2017-09-11
  • 2016-01-22
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2019-02-18
相关资源
最近更新 更多