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)
添加回答
举报