【问题标题】:Function doesn't return properly in recursive function?函数在递归函数中没有正确返回?
【发布时间】:2019-08-21 08:55:03
【问题描述】:

我试图编写一个返回数字的 collat​​z 序列的递归函数,但代码(如下所示)不起作用。如何避免这种情况以及为什么会发生这种情况?

如果我写print(x)而不是return x,它可以正常打印,但我不知道为什么它不能返回x。

def collatz(x):
    if x[-1] == 1:
        return x
    elif x[-1] % 2 == 0:
        collatz(x + [x[-1]/2])
    elif x[-1] % 2 == 1:
        collatz(x + [3*x[-1] + 1])

【问题讨论】:

  • 你返回 x,但在递归调用中你也应该返回。否则只有最里面的调用返回 x,但外部的调用不返回任何东西。基本上:collatz(x +... -> return collatz(x +...

标签: python function return


【解决方案1】:

您缺少用于递归调用的 returns。这就是你需要的:

def collatz(x):
    if x[-1] == 1:
        return x
    elif x[-1] % 2 == 0:
        return collatz(x + [x[-1]/2])
    elif x[-1] % 2 == 1:
        return collatz(x + [3*x[-1] + 1])

【讨论】:

    【解决方案2】:

    您忘记从递归调用中返回一个值。所以每次你递归调用时,你实际上是在返回None

    在每次调用collatz之前添加return

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2015-03-21
      • 2023-01-01
      • 2021-11-07
      • 1970-01-01
      • 2012-10-09
      相关资源
      最近更新 更多