为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2022-12-20 15:23:40
你能一步一步解释一下,为什么结果值变成1、3、6、10、15、21?def recursion(number):    if(number > 0):      result = number + recursion(number - 1)      print(result)    else:      result = 0    return resultprint("\n\nRecursion Example Results")recursion(6)
查看完整描述

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)将运行如下所示:

  1. 我们称之为recursion(6)

  2. 6 大于 0。所以我们调用recursion(6-1)which isrecursion(5)并将其加 6。我们还没有打印任何东西,因为我们正在等待recursion(5)完成。

  3. 5 大于 0。所以我们称recursion(4)。还没有打印出来。

  4. 4 大于 0。所以我们称recursion(3)。还没有打印出来。

  5. 3 大于 0。所以我们称recursion(2)。还没有打印出来。

  6. 2 大于 0。所以我们称recursion(1)。还没有打印出来。

  7. 1 大于 0。所以我们称recursion(0)。还没有打印出来。

  8. 0 不大于 0,所以我们返回 0。我们这里不打印任何东西

  9. 所以对于递归recursion(1)我们得到1 + 0(从前一行)所以我们打印 1 并返回 1

  10. 因为recursion(2)我们得到了2 + 1(从上一行)所以我们打印并返回 3

  11. 因为recursion(3)我们得到3 + 3所以我们打印并返回 6

  12. 因为recursion(4)我们得到4 + 6所以我们打印并返回 10

  13. 因为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)


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信