Степенная функция с помощью рекурсии - PullRequest
0 голосов
/ 12 февраля 2019

Реализация должна вычислять число до n-й степени, используя рекурсию, однако, каждый вызов сам по себе сохраняет nb без изменений, в то время как мощность уменьшается.Я пытался использовать переменную-аккумулятор, но при каждом повторном вызове он по умолчанию инициализируется по умолчанию.Есть ли способ сохранить nb * nb в nb без добавления дополнительного параметра?или потерять базовое значение?

Когда я запускаю ft_recursive_power (3, 10);в визуализаторе переменного тока (ctutor) и передав ему эти аргументы, он показывает, что nb остается 3 на протяжении всего выполнения и возвращает 177147, в то время как он должен накапливать умножение и возвращать 59049. Или я что-то упустил?

int   ft_recursive_power(int nb, int power)
{
  // 0 to the 0th case
  if (power == 0 && nb == 0)
    return (1);
  // recursive case
  if (power > 0)
    return (nb * ft_recursive_power(nb, power - 1));
  return (nb);
}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы получаете неверный результат, потому что ваш базовый регистр неверен.

Значение 177147 равно 3 11 , а не 3 10 , что означает, что выУмножаем один лишний раз.Это происходит потому, что вы return nb в базовом случае, когда power равно 0.

При увеличении числа до степени 0 результат равен 1, поэтому ваш базовый случай должен быть равен 1.

int   ft_recursive_power(int nb, int power)
{
  // 0 to the 0th case
  if (power == 0 && nb == 0)
    return 1;
  // recursive case
  if (power > 0)
    return nb * ft_recursive_power(nb, power - 1);
  return 1;
}
0 голосов
/ 12 февраля 2019

Вот ваша проблема:

if (power == 0 && nb == 0)

следует заменить на

if (power == 0)

и добавить регистр (nb == 0), а также

if (nb == 0)

Функция должна работать и для отрицательной мощности, поэтому я предложил изменить тип возвращаемого значения на float.

Это мое решение:

float   ft_recursive_power(int nb, int power)
{
    // 0 to the 0th case
    if (power == 0)
        return 1;
    if (nb == 0)
        return 0;

    // recursive case
    // power is positive
    if (power > 0)
        return (nb * ft_recursive_power(nb, power - 1));

    // mean power is negative
    else
        return (ft_recursive_power(nb, power + 1) / nb);
}
...