有人可以解释在大于大于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
答案 0 :(得分:2)
以下是发生的事情的粗略说明:
我们暂时忘记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
用于很好地报告这些情况。
答案 1 :(得分:1)
ourSum(1,4):
首先,由于以下原因,我们的星(5,4,16)返回0
if lower > upper:
print(blanks, 0)
return 0
上一次递归就坐在那里:
results = 3 + ourSum(4,4,12) 但我们刚刚返回了我们的结果(4,4,12)= 4.
现在:
继续这样做结果= 2 + ourSum(3,4,8),但这是7所以结果= 9.打印并继续进行剩余的结果= 1 + ourSum(2,4,4)= 10最后,对于我们的第一个问题(1,4),我们返回结果= 10。
答案 2 :(得分:0)
这是因为每个函数调用中的lower都不同,每次都将它添加到ourSum(...)以获得结果。
results = lower + ourSum(lower + 1, upper, margin + 4)
此行在每次函数调用时执行。因此,您的函数基本上计算每个值lower
的总和,即1到4之间所有数字的总和。
第五个电话的返回值为0
。
在第4次调用中,lower的值为4
(正如您在函数的输出中所看到的)。因此,第4次通话的返回值为lower + ourSum(...)
= 0 + 4
= 4
。
第三次调用的返回值是lower + ourSum(...)
= 3 + 4
= 7。
等等。
答案 3 :(得分:0)
将print(blanks, lower, upper)
更改为print('A', blanks, lower, upper)
,您将看到在打印零值之前永远不会返回。
因此,所有上半部分打印都在第一次打印。您还需要记住,这些值都是本地值,所以当您最终返回0时,您将一个值添加到本地较低值3,依此类推。