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ですか?

4

1 に答える 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;
}
于 2013-10-07T00:19:16.807 に答える