递归函数返回None,但打印正确的结果

时间:2019-10-14 16:17:17

标签: python-3.x recursion

我正在研究填充列表的递归函数。我遇到一个问题,当我尝试返回列表本身时,我收到了None参数。但是,如果我打印相同的参数,则会得到正确的列表。知道为什么我会看到这样的行为吗?

示例:

def Price(tau, price):

price[tau] = (tau**2 - tau) + price[tau+1] - price[tau+2]

if tau == 0:
    return price

else:
    tau = tau - 1
    Price(tau, price)



print(Price(tau = 3,
            price = 6*[0]))

> None

然而,仅定价价格会给出正确的结果:

def Price(tau, price):

price[tau] = (tau**2 - tau) + price[tau+1] - price[tau+2]

if tau == 0:
    print(price)

else:
    tau = tau - 1
    Price(tau, price)



Price(tau = 3,
      price = 6*[0])

> [-6, 2, 8, 6, 0, 0]

1 个答案:

答案 0 :(得分:1)

在函数内部,当您进入Price语句时,仅返回if的结果。如果您打了else语句,您确实确实会更深一步地进入递归循环,但是您永远不会返回该结果。尝试以下方法:

if tau == 0:
    return price

else:
    tau = tau - 1
    return Price(tau, price)

Demo