我应该如何使用递归递增数字?

时间:2014-01-20 06:26:09

标签: java recursion

我想要使用递归函数递增数字的问题。该函数没有像我期望的那样返回值。在调试时,我看到数字增加但是当返回值时,似乎对数字的调整以相反的顺序返回。

这是一个简单的例子:

private static int recursionTest(int num){
    if (num < 10){
        recursionTest(++num);
    }
    return num;
}

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

输出始终为2.当我使用逐步调试器时,我看到以下内容:

  1. 每次迭代次数增加1。
  2. 当数字达到10时,将执行return语句。
  3. 调试器然后突出显示“recursionTest(++ num);”但是这个数字减少了1。
  4. 再次执行return语句。
  5. 重复步骤3和4,直到最终返回值为2。
  6. 为什么值最终会减少,如何返回最初计算的值?

6 个答案:

答案 0 :(得分:11)

应该是这样的:

private static int recursionTest(int num){
    if (num < 10){
       return recursionTest(++num);
    }
    else
       return num;
}

答案 1 :(得分:2)

这是因为您仍然返回num而不是递归函数的结果。

private static int recursionTest(int num){
    if (num < 10){
        return recursionTest(++num); 
    }
    return num;
}

答案 2 :(得分:2)

尝试使用:

num = recursionTest(++num);

答案 3 :(得分:1)

您的问题是您必须返回递归调用,而不是数字。如果这样做,您将始终获得初始值+ 1。

解决方案:

private static int recursionTest(int num){
    if(num < 10){
        return recursionTest(num + 1);
    }

    return num;
}

答案 4 :(得分:0)

试试这个,明确使用结束条件:

int recursionTest(int num) {
        if(num == 10){ //recursion exit condition
            return num;
        }
        return recursionTest(++num);
    }

答案 5 :(得分:-2)

private static int recursionTest(int num){
   while(num < 10){
        recursionTest(++num);
        if(num < 10){
            break;
        }
    }
    return num;
}

上面的代码片段将循环迭代10次,因此它会很快。