N /(2N - 1)的递归求和

时间:2016-04-05 21:21:26

标签: java recursion

对于正整数N,我想要1/1 + 2/3 + ... + N/(2N-1)的总和。

我的递归Sum方法停留在无限循环上,我不知道为什么。打印出变量时,我注意到first(我的参数)正在增加。 <永远不会达到增加value的声明。

public double Sum(double first) {

    if (first > 1) {
     System.out.println("first :" + first);
     value  +=   first / ( Sum(2*first - 1) + Sum(first-1) );
     System.out.println("val: " + value);
     return value;
    }

   if (first <= 1) {
       return 1;
    }
  else {
      return value;
  }

}

2 个答案:

答案 0 :(得分:5)

您在if (first > 1)分支中进行递归调用。

这些递归调用中的第一个是Sum(2*first - 1);在value递增之前,必须完全评估这个和另一个递归调用。那里的参数也是> 1,所以你将继续进入同一个分支,无限地进行这些递归调用(或者,至少,直到你超过存储在double中的最大值)。

如果你想以递归方式从N开始,你不需要两个递归调用:

public double Sum(int first) {
  if (first <= 1) {
    return 1;
  } else {
    return first / (2.0 * first - 1) + Sum(first - 1);
  }
}

然后通过调用Sum(N)来评估它。

答案 1 :(得分:1)

value += first / (2*first - 1) + Sum(first-1);