2010-12-03 3 views
1

지금까지 얻은 모든 것이 정의입니다.힘 및 계승 함수를 반복적으로 구현하려고합니다. C++

double power(double base, int exponent); 

double factorial(double n); 

그리고 난 완전히 잃어 버렸고 나는 생각을 찾고 있습니다. 다음을 읽어

+2

SO 또는 Google의 과거에는 한번도 묻지 않았습니다. : - ~ –

+1

하지만 제 제안은 재귀에 대한 강의 노트를 다시 읽는 것입니다. –

+0

나는 권력과 계승의 기능에서 기대했던 바를 정확히 이해하지 못했다. 나는 재귀를 이해하지만 나는 쉬는 날을 보내고있다. Skilldrick은 그것을 지웠다. 이제 나는 어리석은 롤을 느낀다 ... – Zud

답변

8

음,^4 3 3 * 3^3 3 * 3 * 3 * 3입니다. 3^3은 3 * 3^2입니다. 3^2는 3 * 3^1입니다. 3^1은 3입니다.

5! 5 * 4 * 3 * 2 * 1입니다. 5 * 4입니다. 4! 4 * 3!입니다. 삼! 3 * 2!입니다. 2! 2 * 1!입니다. 1! 충분히 제공해야

1. ...에

0
int factorial(int n){ 
if(n==0) return 1; 
else return n*factorial(n-1);} 


int power(int number, int p){ 
     if(p==1) return number; 
     else return number*power(number, p-1); 
} 
0
double power(double base, int exponent) 
{ 
    if (exponent == 0) 
      return 1; 
    else 
      return base * power(base, exponent - 1); 
} 

double factorial(double n) 
{ 
    if (n == 0) 
      return 1; 
    else 
      return n * factorial(n - 1); 
} 
+0

또는'if (exponent == 1) return base;'? – Skilldrick

+0

예 :) 추가 곱셈을 피합니다. 나는 그것을 놓쳤다. – JohnGray

+0

@Skilldrick 그러면 x^0에서 작동하지 않습니다. 그것은 올바르게 0^0을 처리 할지라도 정의되지 않습니다. –

0

실제로 생산 코드에 대한 이러한 함수를 작성한다면 (첫 번째 재귀를 사용하지 않고이 문제를 해결 시도, 재귀에 받고있을 것입니다 어쨌든 그들의 성능을 해칠 것입니다). 이 작업을 얻은 후에는 재귀 알고리즘으로 변환하는 것이 간단해야합니다.

힌트 :

N! = N * (N-1)! N의 P 1에서

N^P = 제품은 다른

0

모두 특급 긍정적 인 가정 것으로 보인다. 응용 프로그램에서 중요한 경우 0^0을 1보다는 NaN으로 올바르게 처리하도록 수정할 수 있습니다.

double int_power(double base, int exp) { 
    if (exp == 0) 
     return 1; 
    if (exp > 0) 
     return base*int_power(base, exp-1); 
    else 
     return int_power(base, exp+1)/base; 
}