首页 > 解决方案 > 为什么我需要使用 `return` 才能使递归工作?

问题描述

这是我在 Hackerrank 上遇到的递归编码挑战的一部分。我理解这个概念。然而,这部分并不完全,我挣扎了很长一段时间。请给我解释一下!

此代码位不起作用:

    if n < 1:
        result = 1
    else:
        result = n * factorial(n-1)
    print(n)

但如果我使用return,它会工作。

为什么?对我来说,在这种情况下它们是完全一样的。

标签: pythonrecursion

解决方案


该指令n * factorial(n - 1)将乘以n的返回值factorial(n - 1)。如果您不使用return语句,那么您乘以n哪个None不是预期的行为。

因此正确的程序是:

def factorial(n):
    if n < 1:
        result = 1
    else:
        result = n * factorial(n - 1)
    return result

或更简洁地说

def factorial(n):
    if n < 1: return 1
    return n * factorial(n - 1)

推荐阅读