我不明白return語句如何在任何遞歸函數中工作(在python中)。有人可以給我一些基本的例子,說明發生了什麼,當你在遞歸函數中返回「東西」時?返回函數如何在遞歸中工作?
回答
遞歸是一種優雅的編程風格,其中函數以更簡單的形式調用自身,直到實現最簡單的形式。
這個最簡單的形式被稱爲'基本情況'(在下面的例子中,基本情況是if n == 1: return 1
,因爲對於階乘,1是最簡單的情況下,你需要達到)這是一個測試,看看是否輸入處於最簡單的狀態。
一個遞歸函數的另一部分是「遞歸情況下」,其進一步簡化了功能(在以下例子中,n * factorial(n-1)
是遞歸情況下,因爲它是使用簡化的n-1
功能)。
一個簡單的,遞歸階乘函數:
def factorial(n): # only works for positive numbers
if n == 1: return 1 # base case
return n * factorial(n-1) # recursive case; only executed if the above is not
# executed because 'return' stops a function
階乘是所有數字的直至幷包括n
乘法。
我們把這個分開: factorial(4)
:
- 是
n
1?沒有,所以return n * factorial(n-1)
4 * factorial(4-1)
=4 * factorial(3)
- 是
n
1?沒有,所以return n * factorial(n-1)
3 * factorial(3-1)
=3 * factorial(2)
- 是
n
1?沒有,所以return n * factorial(n-1)
2 * factorial(2-1)
=2 * factorial(1)
- 是
n
1?是的,所以return 1
現在讓我們跟蹤調用:
步驟1,3,5只是檢查,所以他們真的不返回任何東西:
- 第2步:
factorial(4) = 4 * factorial(3)
- 步驟4:
factorial(3) = 3 * factorial(2)
- 步驟6:
factorial(2) = 2 * factorial(1)
- 步驟7:
factorial(1) = 1
。
因此,跟蹤return
語句: 1 * 2 * 3 * 4 = 24,其是4
非常感謝! – user1744228 2013-03-15 02:00:06
階乘當一個函數使得遞歸調用,則控制傳遞到被叫功能。當函數返回時,控制將的傳遞給調用該函數的那個函數。這是一個交互式調試器如何描述發生了什麼:步驟在到一個函數,步驟在每個語句,步驟出的功能。
函數調用的通常簿記是稱爲堆棧的結構。我們應該想象一堆放在彈簧上的盤子。函數的每個調用(調用)都是一個「推」到棧頂的「板塊」。每個從函數返回的「彈出」調用離開堆棧。
下面是一個使用縮進表示遞歸調用(通過測量堆棧的深度)
>>> import inspect
>>> def factorial(n):
... print('{:{}}factorial({})'.format('', len(inspect.stack()), n))
... retval = 1 if n == 1 else n * factorial(n-1)
... print('{:{}}return {}'.format('', len(inspect.stack()), retval))
... return retval
...
>>> factorial(5)
factorial(5)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
return 1
return 2
return 6
return 24
return 120
120
- 1. 遞歸函數的返回工作不
- 2. 如何返回遞歸工作?
- 3. 如何返回遞歸函數
- 4. 在遞歸函數中返回
- 5. 函數返回無遞歸
- 6. 遞歸函數返回undefined
- 7. 遞歸函數不返回
- 8. 返回遞歸函數
- 9. 遞歸函數不返回
- 10. PHP遞歸函數返回
- 11. 帶遞歸函數返回
- 12. 遞歸函數返回
- 13. 遞歸:如何從遞歸函數返回值-1
- 14. 如何在函數遞歸時返回父函數Javascript
- 15. 這個遞歸函數如何工作?
- 16. 返回語句如何在遞歸中工作?
- 17. 遞歸函數沒有任何返回
- 18. JavaScript中的遞歸函數返回undefined
- 19. JavaScript中的遞歸函數返回undefined
- 20. 從Python中的遞歸函數返回
- 21. 遞歸函數 - 工作
- 22. 在遞歸函數中如何計算返回結果?
- 23. 如何在變量中保存遞歸函數的返回值
- 24. 如何在Python中返回每個遞歸函數調用?
- 25. 遞歸函數如何工作似乎是「無限遞歸」?
- 26. 遞歸函數不返回數組
- 27. 遞歸函數返回空數組
- 28. 在遞歸函數中返回函數和不返回有什麼區別?
- 29. 遞歸函數調用如何在循環中工作?
- 30. 遞歸函數如何在'for循環'中工作
,最好的辦法,看看它們是如何工作的,只是插了一些並按照代碼一個簡單的例子用手。 – Blender 2013-03-15 01:29:56