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

Ste*_*e C 0 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;
  }

}
Run Code Online (Sandbox Code Playgroud)

And*_*ner 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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