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 回答