带递归的StackOverflowError

时间:2012-11-01 00:17:13

标签: java exception recursion compiler-errors stack-overflow

有谁能告诉我为什么会收到此错误?这真让我烦恼。我想要做的是找到表达式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);}
}
}

感谢。

2 个答案:

答案 0 :(得分:6)

这是因为您在n中使用的是num而不是recurSumn是一个永不改变的静态变量;你应该删除它。另一方面,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);
    }
}

答案 1 :(得分:1)

由于精度问题,决不使用“==”,因此你的递归永远不会结束。

将其更改为

if (n <= 1)

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