2017-08-14 136 views
0

我是cs的新手,我在理解Python中的遞歸內容時遇到了一些小問題。Python遞歸瞭解問題

我有3個問題想問,或者確認我是否正確理解內容。

1:我不確定在遞歸中使用基本情況的目的。基本情況是否能夠在我的程序中終止遞歸?

2:假設我的遞歸調用高於我的程序的任何其他代碼。程序是否會首先運行遞歸,然後在遞歸之後運行內容?

3:如何以合理的正確率正確跟蹤遞歸?我個人認爲追蹤遞歸非常困難,我幾乎無法在網上找到一些指令。

感謝您回答我的問題。

+1

1.基本情況是遞歸的終端情況。 2.是的,遞歸調用必須在繼續之前終止並完全展開堆棧。 3.調用堆棧中的深度對於調試通常很有用,您可以添加一個額外的參數來保存診斷打印的深度。 – AChampion

回答

1
  1. 是的。這個想法是,遞歸調用將繼續調用自己(使用不同的輸入),直到它調用基本情況(或許多基本情況之一)。基本案例通常是解決問題的小問題,並且不依賴於問題的任何其他部分。然後,它會通過回答問題的最簡單版本來回答問題。

  2. 是的。與來自外部的遞歸函數進行交互與與任何其他函數進行交互完全相同。

  3. 取決於您寫的內容以及調試工具的舒適程度。如果您試圖追蹤在遞歸調用之間來回傳遞哪些值,則函數開始處的所有參數和最後的返回值可能會讓您感覺很不舒服。

圍繞這個東西包裝頭的最簡單的方法是寫一些你自己的頭。從一些基本的例子開始(經典是階乘函數),如果遇到困難,請尋求幫助。

編輯:如果你更關注數學,你可能會查找數學歸納(無論如何,你將學習它作爲cs教育的一部分)。這是完全相同的概念,只是教學有所不同。

+0

我知道這個問題是針對Python的,但是,如果你知道一種語言,你就知道它們全部。我學習遞歸的方式是這個網站http://codingbat.com/java/Recursion-1。你甚至可以在Python中寫出問題並學習一些單元測試:) –

+0

@JohnHamlettIV這是一個很好的觀察結果,我沒有在我的答案中提到。遞歸是語言不可知的,任何試圖瞭解它的人都應該意識到這一點。 (我將把'python'標籤置於這個問題之外,你說得對,它不屬於) –