2013-10-31 5 views
3

좋아,이게 숙제라는 말로 시작하자. 그러나 나는 대답을 가지고있다. (그것이 효과가있을 때까지 놀았다.) 내 질문은 교사가 여러 번 (온라인 수업) 그것을 어떻게 설명했는지에 관한 것이지만, 여기에있는 누군가가 더 나은 것을 희망하면서, 나는 그것을 얻지 못하고있다. 나는 그들에 대해 생각하는대로 일들을 설명한다. ** recurPower ** 알아 들었지만 이해할 수 없다.

재귀 같은 문제의 더 작은 버전을 해결하기 위해 자신을 호출 한 후 초기 문제를 해결하기 base으로 결과를 곱하여 base**exp을 계산하는 함수 recurPower(base, exp) 쓰기 : 여기

가 할당된다.

이 함수는 두 값을 취해야합니다. base은 부동 소수점 또는 정수일 수 있습니다. exp은 정수 이됩니다. 하나의 숫자 값을 반환해야합니다. 코드는 재귀 적이어야합니다. ** 연산자 또는 루핑 구문을 사용할 수 없습니다.

시행 착오를 몇 번 시도한 결과 (올바른 방법으로 몇 시간의 변화를 의미 함) 올바른 코드를 찾았지만 올바른 답을 찾지 못했지만 방법을 이해하지 못했습니다. 마지막 부분 경우이다 아무것도 1. 두 번째로 돌아올 것이라고 이유를 이해 해달라고 ....

def recurPower(base, exp): 
''' 
base: int or float. 
exp: int >= 0 

returns: int or float, base^exp 
''' 

if exp <= 0: 
    return 1 


return base * recurPower(base, exp - 1) 

우선 = 0 다음 반환 특급이 1 인 부분은 다음과 같습니다

코드입니다 코드가없는 경우 루프가 없으면 exp가 1 씩 감소합니다. 정의에 exp <= 0 1을 반환

않는 이유

+1

'recurPower (base, exp - 1) '이 무엇을 의미하는지 알고 있습니까? – SLaks

+0

음, 저 기초 * recurPower (기본, 특급 - 1) 기지를 가지고 기지로 그것을 곱하면 1로 exp를 줄이기 위해,하지만 내가 다시 EXP를 줄이기 위해 다시 반복하는 방법을 이해하지 못했지만, 좀 아래에있는 답변을 보시오. – Aoxx

+0

edx.org의 "6.00.1x 컴퓨터 과학 및 프로그래밍 개론"입니다. – furas

답변

3

첫 번째 문제는, 지수로 0 아무것도 그래서 1, 두 번째 부분에 관해서는

1^0 => 1 
2^0 => 1 
... 

이다, 이것은 재귀에있다 작업. 내가 recurPower(2, 6)를 호출하면 나는 대답이다

recurPower(2, 6) => 
2 * recurPower(2, 5) => 
2 * 2 * recurPower(2, 4) => 
... 
2 * 2 * 2 * 2 * 2 * 2 * 1 

과 같은 일련의 호출을 받게됩니다.

영어로 2^6은 2 * 2^5와 완전히 동일합니다.이 규칙을 사용하여 더 간단하고 간단한 지수로 나누십시오.

+0

루프가있어서 함수를 호출하면됩니다. – Aoxx

+0

@Aoxx 예, 루프입니다.Scheme과 같은 언어에서 모든 루프는 재귀로 표현됩니다. – uselpa

+0

그래, 2 곱하기 제로 곱하기 1 어떻게? 나는 그것이 2 일 것이라고 생각할 것이다 ....? – Aoxx

5
pow(2, 3) 
= 2 * pow(2, 2) 
= 2 * (2 * pow(2, 1)) 
= 2 * (2 * (2 * (pow 2, 0))) 
= 2 * (2 * (2 * 1))) ; base case: n=0 -> return 1 
= 2 * (2 * 2) 
= 2 * 4 
= 8 

모든 재귀에서 기본 사례, 즉 재귀가 중지되는 조건이 필요합니다. 그렇지 않으면 종료되지 않습니다. 곱셈에서는 1을 곱하는 것이 중립적이기 때문에 기본 사례는 1을 반환 할 가능성이 높습니다. 즉, 이전 계산에 영향을 미치지 않습니다.

기본 케이스 이외의 경우, "n"x = n * n^(x-1)의 "작은"용어로 표현할 수있는 일반적인 경우가 있습니다. x = 0이다.

관련 문제