需要帮助来理解递归

时间:2014-10-05 16:28:44

标签: java recursion

n = 10
10+9+8+7+6+5+4+3+2+1 = 55

这是一段代码,用于将从n开始的数字添加到之前的每个数字。

public static int recursion(int index){
    if (index == 0){
        return 0;
    }
    else{
        return recursion(index-1) + index;
    }
}

对不起愚蠢的问题,但这里让我感到困惑:当索引不为零时,它再次调用递归函数,索引减去1,依此类推,直到索引为零。但是,它是编码递归(index-1)+索引。

那么为什么每次调用函数时索引都没有减1并且加10(或任何索引号)?为什么不是这样的:(10 +(9 + 10)+(8 + 10)+(7 + 10)+ ....)?

3 个答案:

答案 0 :(得分:3)

尝试将此总和写为

sum(10) = 1+2+3+4+5+6+7+8+9+10

这会让你看到

sum(10) = (1+2+3+4+5+6+7+8+9)+10 = sum(9)+10

sum(9) = (1+2+3+4+5+6+7+8)+9

等等

换句话说

sum(i) = sum(i-1) + i;

或者更准确

         {0            for i=0
sum(i) = {
         {sum(i-1) + i for i>0

BTW每次调用方法时,其变量在每个方法调用中都是单独的实例,这意味着index中的recursion(10)index中的recursion(9)是分开的变量。

答案 1 :(得分:2)

手动评估。从index = 10开始:

索引不为零,所以我们进入else

return recursion(10 - 1) + 10

return recursion(9) + 10

现在,recursion(9)评估为

return recursion(9 - 1) + 9

return recursion(8) + 9

所以,代入以上内容:

return recursion(8) + 9 + 10

所以,继续进行

return recursion(0) + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

我们知道recursion(0)会返回0,所以递归会在此时停止。

答案 2 :(得分:0)

recursion(index-1) + index;

对于这个声明,它将是

recursion(10-1) + index;

用于评估10-1将会完成,即。 9 然后,为了找到该语句的ans,必须找到recursion(9),以便再次调用函数recursion。 所以表达成为

recursion(9) + 10;

递归(9)将是

recursion(9-1) + 9

这会继续,最后会recursion(0)返回0