2016-10-11 60 views
-2

我學習這個冪遞歸算法,它工作得很好。 但我不明白爲什麼這個工程? 因爲我希望總是返回1,1,1 ......如果n甚至因爲沒有在return繁殖。
當我嘗試recPower(3,2),並打印步驟因子的步驟,這將是這樣的:冪遞歸

但是,爲什麼3出來?

def recPower(a, n): 
    # raises a to the int power n 
    if n == 0: 
     return 1 
    else: 
     factor = recPower(a, n//2) 
     if n%2 == 0: # n is even 
      return factor * factor 
     else:  # n is odd 
      return factor * factor * a 
+1

3是存在的,因爲1 * 1 * 3 == 3 – shuttle87

+0

你的算法正好實現了這個:a **(2 * n)=(a ** n)*(a ** n)','a **(2 * n + 1)=(a ** n )*(a ** n)* a'。你究竟對此瞭解甚麼? – Julien

+0

「因爲a不會在回報中增加」根據您的確切意思,我會說它在底部回報:'return factor * factor * a'。 – Evert

回答

0

只要按照它一步一步:

recPower(3, 2) 

n != 0這樣下去else分支:

factor = recPower(3, 2//2) 

那就是:

recPower(3, 1) 

在這個遞歸步驟n != 0我們遵循第一個else分支,1%2 != 0,所以我們遵循第二個else分支。因此,該因子爲1,a ==因此3.

該步驟的返回值是:

factor * factor * a 

1 * 1 * 3 
+0

謝謝,我完全忘記了'n'將等於1,並調用後者'return'。我只關注最初的'n'值。 – paulmassimo