[英]recursive function help/explanation
有人可以解释在大于大于0并且返回0之后会发生什么? 我无法理解程序如何产生4,7,9,10
。 我相信在mySum()函数中调用mySum()的迭代返回0。 这会将结果设置为1 + 0,这将等于1.有人可以花一些时间来引导我完成此操作吗?
def ourSum(lower, upper, margin=0):
blanks = ' ' * margin
print(blanks, lower, upper)
if lower > upper:
print(blanks, 0)
return 0
else:
results = lower + ourSum(lower + 1, upper, margin + 4)
print(blanks, results)
return results
我们的结果ourSum(1,4)
如下:
1 4
2 4
3 4
4 4
5 4
0
4
7
9
10
10
以下是对正在发生的事情的粗略说明:让我们暂时忘记print
和margin
。
ourSum(1,4)
else
子句发生:它返回1 + ourSum(2,4)
else
, ourSum(2,4)
返回2 + ourSum(3,4)
ourSum(3,4)
返回3 + ourSum(4,4)
ourSum(4,4)
返回4+ourSum(5,4)
if
。 return ourSum(5,4)
返回0。 ourSum(4,4)
返回4+0 = 4
ourSum(3,4)
是3+4 = 7
ourSum(2,4)
是2+7 = 9
ourSum(1,4)
返回1+9 = 10
。 print
和margin
用于很好地报告这些情况。
ourSum(1,4):
因此,首先我们的星(5,4,16)返回0,原因如下:
if lower > upper:
print(blanks, 0)
return 0
之前的递归就坐在那里:
结果= 3 + ourSum(4,4,12)但我们刚刚返回了我们的结果(4,4,12)= 4。
所以现在:
继续这样做结果= 2 + ourSum(3,4,8),但这是7所以结果= 9.打印并继续保留其余结果= 1 + ourSum(2,4,4)= 10最后,对于我们最初的theSum(1,4)问题,我们返回结果= 10。
这是因为每个函数调用中的lower都不同,并且每次都将它添加到ourSum(...)以获得结果。
results = lower + ourSum(lower + 1, upper, margin + 4)
该行在每个函数调用时执行。 因此,您的函数基本上计算每个lower
值的总和,即1到4之间所有数字的总和。
第5次调用的返回值为0
。
在第4次调用中,lower的值为4
(您可以在函数的输出中看到)。 因此第4次调用的返回值lower + ourSum(...)
= 0 + 4
= 4
。
然后第三个调用的返回值lower + ourSum(...)
= 3 + 4
= 7.依此类推。
更改print(blanks, lower, upper)
以print('A', blanks, lower, upper)
,您将看到在打印零值之前永远不会返回。
因此,所有上半部分打印都在第一次打印。 您还需要记住,这些值都是本地值,所以当您最终返回0时,您将一个值添加到本地较低值3,依此类推。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.