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)將運行如下所示:
我們稱之為
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)
添加回答
舉報