亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個特定的 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 的數字的總和?,F在注意,我可以重寫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 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號