2012-10-18 4 views
0

이 간단한 코드는 지수를 계산하는 재귀를 사용합니다. 여기를 제외하고 재귀가 어떻게 작동하는지 이해합니다 : if exp <= 0: return 1. 내가 두 번째 힘을 내게주는 함수를 부르 자. 반환 값이 1이면 올바른 값인 25를 얻을 수 있지만 2이면 50, 3, 75를 반환합니다.Python : 재귀 및 return 문

환경 내에서 이것이 얼마나 정확하게 작동하는지 보는 데 약간의 문제가 있습니다.

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 (0이 아닌베이스의 경우)이며 곱셈 적 신원이기 때문에 자유롭게 곱할 수 있습니다.

그것은 당신이 숫자가가는 곳을보고, 재귀 "을 줄이기"시도 도움이 될 수 있습니다

:

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

가 1 대신에 두 세 번 당신이하려고하는 지수를 2 또는 3을 가져옵니다 퍼팅 계산하다.

2

여기에 일이 뭐죠, 예를 들어, 당신이 return 1 문에 의해 반환되는 값으로 시작됩니다 반환 값의 폭포로 끝날 것입니다 :

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

반환 문을 후하게됩니다 이 :

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

(체인을 계단식으로 연결 했으므로 이전 체인과는 반대).

당신이 2에 반환 값을 변경하는 경우 당신은 얻을 것이다 :

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

(우리는 체인을 계단식하고 있기 때문에 이전 체인의 반대로).

괄호 안의 숫자는 재귀 체인의 아래쪽에서부터 반환됩니다.