2

谁能告诉我为什么我会收到这个错误?这真的让我很烦。我要做的是找到表达式 2^k +1 的总和,因为 k 的范围从 1 到 n。

import java.util.*;

public class mySums
{
private static double n;

public static void main(String[] args)
{
    recurSum(4);
    System.out.println();
}

/*  public static void iterativeSum (int num)
{

}
*/
public static double recurSum (double num)
{
    if (n==1){
      return 1;}
    else {
      return (Math.pow(2.0, n) +1) + recurSum(n-1);}
}
}

谢谢。

4

2 回答 2

6

这是因为您使用n而不是num在您的recurSum. n是一个永远不会改变的静态变量;你应该删除它。num另一方面,是您传递给的参数recurSum;它的值随着您降低递归调用的级别而降低,最终击中1并让您退出:

public static double recurSum (double num) {
    if (num==1) {
        return 1;
    } else {
        return (Math.pow(2.0, num) +1) + recurSum(num-1);
    }
}
于 2012-11-01T00:19:02.803 回答
1

由于精度问题,切勿将 "==" 与 double 一起使用,因此您的递归永无止境。

将其更改为

if (n <= 1)

此外,我刚刚注意到该函数接受一个参数“num”,因此函数中未定义“n”,但我假设这只是一个错字。

于 2012-11-01T00:19:46.110 回答