Попытка рекурсивно реализовать степенные и факторные функции.C ++ - PullRequest
1 голос
/ 03 декабря 2010

Все, что я получил, - это определения.

double power(double base, int exponent);

double factorial(double n);

И после этого я полностью теряюсь и ищу идеи.

Ответы [ 6 ]

8 голосов
/ 03 декабря 2010

Ну, 3 ^ 4 - это 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!3 * 2 !.2!это 2 * 1 !.1!это 1.

Это должно дать вам достаточно, чтобы продолжить ...

3 голосов
/ 03 декабря 2010
0 голосов
/ 03 декабря 2010

Все остальные, кажется, считают, что опыт положительный.Возможно, можно изменить, чтобы правильно обрабатывать 0 ^ 0 как NaN, а не 1, если это важно для вашего приложения.

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;
}
0 голосов
/ 03 декабря 2010

Попробуйте решить эту проблему без использования рекурсии (если вы на самом деле писали эти функции для производственного кода, рекурсия в любом случае снизит их производительность). После того, как вы это заработаете, преобразовать его в рекурсивный алгоритм будет несложно.

ПОДСКАЗКА:

N! = N * (N-1)!

N ^ P = произведение от 1 до P N

0 голосов
/ 03 декабря 2010
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 голосов
/ 03 декабря 2010
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...