2012-10-18 117 views
0

我有這個簡單的代碼使用遞歸計算指數。我瞭解遞歸如何在這裏工作,除了:if exp <= 0: return 1。假設我稱這個功能爲我提供五次第二權力。如果我有它返回1,它會給我正確的價值25,但如果2它返回50,375。Python:遞歸和返回語句

我有點麻煩,看看它是如何工作的環境:

def recurPower(base,exp): 
    if exp <= 0: 
     return 1 
    return base*recurPower(base,exp-1) 

print str(recurPower(5,2)) 
+0

代碼看起來不錯。我對你對5^2的描述感到困惑。它看起來不像代碼會做任何錯誤。 – sashang

回答

4

我不確定我是否理解這個問題。基本情況下的1是base^0(對於任何非零基數),也是因爲它是乘法標識,因此您可以自由乘以它。

它可以幫助你試試「展開」遞歸,看到這裏的數字去:

recurPower(5, 2) = 
5 * recurPower(5, 1) = 
5 * 5 * recurPower(5, 0) = 
5 * 5 * 1 = 
25 

把2或3代替1的讓你試圖指數你兩次或三次計算。

2

whats發生在這裏,是你會返回值的級聯反應,將與由return 1語句返回的值開始結束了,例如:然後

recurPower(5,2) == 
recurPower(5,2) -> recurPower(5,1) -> recurPower(5,0) 

的return語句將使這個:

1 -> (1)*5 -> (5)*5 

(與上一個鏈條相反,因爲我們正在鏈上)。

,如果你改變返回值2您將獲得:

2 -> (2)*5 -> (10)*5 

(在,因爲我們串接起來鏈前面的鏈中的反向)。

括號中的數字從遞歸鏈中向下返回。