我是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
,但会打印正确的值。
那么,如果我有递归,为什么还需要返回函数?
答案 0 :(得分:3)
递归是解决问题的方法所依赖的方法 对同一问题的较小实例的解决方案...... - Wikipedia
因此,尝试解决“大”问题,您将使用相同的方法,但处于“较小”的问题。换句话说,你将需要“较小”问题的答案,以解决“大”问题。 因此,您必须返回该结果,因为如果没有,您将只打印它,它不能用于解决“更大”的问题。
答案 1 :(得分:0)
如果你没有说要归还某些东西,它就不会,递归与否。
答案 2 :(得分:0)
您的功能有两条路径。一个返回day
,一个用一组新的参数重新调用你的函数。
else
条款是“无趣的”条款。它只返回一个固定值,所以没有神秘感。
if
子句更“有趣”。它具有将计算分解为一系列链接步骤的效果。在每一步完成一小部分计算,然后向下移动直到计算完成。 else
分支通过返回最终值来决定何时完成计算。这个值会被传回到行,直到第一个递归调用最终从顶层函数返回它。
因此,如果不是递归返回,则最终值无法返回到该行。如果没有明确的return语句,默认情况下将返回None
。
在print(day)
子句中放置else
可以让您在递归调用开始返回之前“查看”最终值。计算步骤在该阶段都已完成 - 唯一要做的就是回溯这些步骤并退出顶级函数。
答案 3 :(得分:0)
将显示打印到屏幕上。或者,换句话说,它为您(用户)提供价值。但在这种情况下,您的代码需要解决较小的问题。它无法读取屏幕上的内容。它需要来自它调用的函数的值 - 即使在这种情况下它调用自身。通过'返回'它将信息传递回链中的值。