1 回答
TA贡献1810条经验 获得超4个赞
看起来这个函数正在返回不超过某个值的连续数字的总和。在查看代码并尝试理解它之前,您需要分解问题:
让我们取一些变量sumUpTo6 = 6 + 5 + 4 .... 0,它是最多 6 的数字的总和。然后让我们取另一个变量sumUpTo7 = 7 + 6 + 5 + 4 ... 0,它是最多 7 的数字的总和。现在注意,我可以重写sumUpTo7为sumUpTo7 = 7 + sumUpTo6
现在,如果我们用对您的函数的调用替换这些变量:
如果recursion(6)给我最多 6 个数字的总和,
然后recursion(7) = 7 + recursion(6)
更一般地说,recursion(number) = number + recursion(number-1)
但是当我们到达时recursion(0)呢?好吧,这称为基本情况,我们想要recursion(0) = 0(因为 0 以内的数字之和为 0)。
所以现在让我们把这一切都写成代码:
def recursion(number): # `number` here is the number we want to add up to
if (number > 0): # if `number` is greater than 0, we can use the number below it to get the answer
result = number + recursion(number-1) # we use the logic above
print(result) # show the result on the command line
else: # if `number` is not greater than 0, then it must be less than or equal to 0
result = 0 # in this case the sum up to number will be 0
return result # pass the result up to the caller
对 的调用recursion(6)将运行如下所示:
我们称之为
recursion(6)6 大于 0。所以我们调用
recursion(6-1)which isrecursion(5)并将其加 6。我们还没有打印任何东西,因为我们正在等待recursion(5)完成。5 大于 0。所以我们称
recursion(4)。还没有打印出来。4 大于 0。所以我们称
recursion(3)。还没有打印出来。3 大于 0。所以我们称
recursion(2)。还没有打印出来。2 大于 0。所以我们称
recursion(1)。还没有打印出来。1 大于 0。所以我们称
recursion(0)。还没有打印出来。0 不大于 0,所以我们返回 0。我们这里不打印任何东西
所以对于递归
recursion(1)我们得到1 + 0(从前一行)所以我们打印 1 并返回 1因为
recursion(2)我们得到了2 + 1(从上一行)所以我们打印并返回 3因为
recursion(3)我们得到3 + 3所以我们打印并返回 6因为
recursion(4)我们得到4 + 6所以我们打印并返回 10因为
recursion(5)我们得到5 + 10所以我们打印并返回 15
......你明白了
我在下面的代码中添加了一些打印语句,以便于理解:
用不同的数字运行这个......
def recursion(number):
if(number > 0):
print("{} is greater than 0".format(number))
print("Calling recursion({}-1)\n".format(number))
previous_result = recursion(number - 1)
print("recursion({}-1) gave {}".format(number, previous_result))
result = number + previous_result
print("returning {} + {} = {}\n".format(number, previous_result, result))
else:
print("Hit 0! Returning 0\n")
result = 0
return result
print("\n\nRecursion Example Results\n\n")
recursion(6)
添加回答
举报
