выходная сумма рекурсивной трассировки серии

0

Почему этот рекурсивный метод не дает мне ответа 2.2833?

   double m(int i)
   {
       if (i == 1)
        return 1;
      else
        return (1/i) + m(i -1);
   }

   int main()
   {
        double value=m(5);
        cout << value << endl;

        return 0;
   }

Ответ я получаю 1?

Теги:
recursion

1 ответ

1

Поскольку 1/1 равно 1 и 1/2 = 0 (1/3 = 0....)

Поэтому нам нужно сделать 1.0/(double) i

Тогда 1,0/2,0 = 0,5

#include <iostream>

double m(int i)
   {
       if (i == 1)
        return 1;
      else
        return (1.0/(double) i) + m(i -1);
   }

int main(int,char**) {
    double value=m(5);
    std::cout << value << "\n";
    return 0;
}
  • 0
    Я изобразил это, и теперь получаю правильный вывод, спасибо
  • 0
    @ user2809437 Да, 1.0 - это двойное число, 1.0f - это число с плавающей запятой, 1 - это 1.0f число, вы должны посмотреть неявные приведения для фундаментальных типов. Не забудьте поднять голос и принять ответ :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню