Python不会返回值而是打印值

时间:2013-12-25 01:25:04

标签: python recursion

我是python的新手,而且是递归的新手。 以下是我的代码,

def day_add(day,delta):
    if day_num(day) + delta >= 7:
        newNum = delta - 7
        day_add(day,newNum)
        return day_add(day,newNum)
    else:
        day = day_name(delta+day_num(day))
        return day

如果我有这条线

return day_add(day,newNum)

函数行为正确并返回正确的值。 但是,如果我没有这条线,但有

print(day)

如果函数转到递归状态,函数可能会返回None,但会打印正确的值。

那么,如果我有递归,为什么还需要返回函数?

4 个答案:

答案 0 :(得分:3)

  

递归是解决问题的方法所依赖的方法   对同一问题的较小实例的解决方案...... - Wikipedia

因此,尝试解决“大”问题,您将使用相同的方法,但处于“较小”的问题。换句话说,你将需要“较小”问题的答案,以解决“大”问题。 因此,您必须返回该结果,因为如果没有,您将只打印它,它不能用于解决“更大”的问题。

答案 1 :(得分:0)

如果你没有说要归还某些东西,它就不会,递归与否。

答案 2 :(得分:0)

您的功能有两条路径。一个返回day,一个用一组新的参数重新调用你的函数。

else条款是“无趣的”条款。它只返回一个固定值,所以没有神秘感。

if子句更“有趣”。它具有将计算分解为一系列链接步骤的效果。在每一步完成一小部分计算,然后向下移动直到计算完成。 else分支通过返回最终值来决定何时完成计算。这个值会被传回到行,直到第一个递归调用最终从顶层函数返回它。

因此,如果不是递归返回,则最终值无法返回到该行。如果没有明确的return语句,默认情况下将返回None

print(day)子句中放置else可以让您在递归调用开始返回之前“查看”最终值。计算步骤在该阶段都已完成 - 唯一要做的就是回溯这些步骤并退出顶级函数。

答案 3 :(得分:0)

将显示打印到屏幕上。或者,换句话说,它为您(用户)提供价值。但在这种情况下,您的代码需要解决较小的问题。它无法读取屏幕上的内容。它需要来自它调用的函数的值 - 即使在这种情况下它调用自身。通过'返回'它将信息传递回链中的值。