지금까지 얻은 모든 것이 정의입니다.힘 및 계승 함수를 반복적으로 구현하려고합니다. C++
double power(double base, int exponent);
double factorial(double n);
그리고 난 완전히 잃어 버렸고 나는 생각을 찾고 있습니다. 다음을 읽어
지금까지 얻은 모든 것이 정의입니다.힘 및 계승 함수를 반복적으로 구현하려고합니다. C++
double power(double base, int exponent);
double factorial(double n);
그리고 난 완전히 잃어 버렸고 나는 생각을 찾고 있습니다. 다음을 읽어
음,^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. ...에
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);
}
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);
}
또는'if (exponent == 1) return base;'? – Skilldrick
예 :) 추가 곱셈을 피합니다. 나는 그것을 놓쳤다. – JohnGray
@Skilldrick 그러면 x^0에서 작동하지 않습니다. 그것은 올바르게 0^0을 처리 할지라도 정의되지 않습니다. –
실제로 생산 코드에 대한 이러한 함수를 작성한다면 (첫 번째 재귀를 사용하지 않고이 문제를 해결 시도, 재귀에 받고있을 것입니다 어쨌든 그들의 성능을 해칠 것입니다). 이 작업을 얻은 후에는 재귀 알고리즘으로 변환하는 것이 간단해야합니다.
힌트 :
N! = N * (N-1)! N의 P 1에서
N^P = 제품은 다른
모두 특급 긍정적 인 가정 것으로 보인다. 응용 프로그램에서 중요한 경우 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;
}
SO 또는 Google의 과거에는 한번도 묻지 않았습니다. : - ~ –
하지만 제 제안은 재귀에 대한 강의 노트를 다시 읽는 것입니다. –
나는 권력과 계승의 기능에서 기대했던 바를 정확히 이해하지 못했다. 나는 재귀를 이해하지만 나는 쉬는 날을 보내고있다. Skilldrick은 그것을 지웠다. 이제 나는 어리석은 롤을 느낀다 ... – Zud