这个特定的 Python 递归是如何工作的?为什么结果值变成了1、3、6、10、15、21?

你能一步一步解释一下,为什么结果值变成1、3、6、10、15、21?


def recursion(number):

    if(number > 0):

      result = number + recursion(number - 1)

      print(result)

    else:

      result = 0

    return result


print("\n\nRecursion Example Results")

recursion(6)


噜噜哒
浏览 112回答 1
1回答

慕莱坞森

看起来这个函数正在返回不超过某个值的连续数字的总和。在查看代码并尝试理解它之前,您需要分解问题:让我们取一些变量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 resultprint("\n\nRecursion Example Results\n\n")recursion(6)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python