public class Main {
public static int test(int n){
int temp = 0 ;
if (n-1>0){
temp = n + test(n-1);
}else {
temp = n;
}
return temp;
}
public static void main(String[] args) {
int test = test(10);
System.out.println(test);
}
}
测试结果:
55
要理解该算法,需要先懂递归。很多人只知道递归是自己调用自己,却并不明白自己调用自己的变量作用域的关系,其实每一次调用自己它的变量都是独立的,是互不影响的,如果你实在理解不了,就把这所有递归的次数,每一次调用都当成不是在调用自己,而是另一个独立的方法。
比如我们可以把上面的test()方法,写成10个test()方法,用1,2,3……10来区分,然后将上面的代码写成一个循环,没一次循环调用不同的方法,执行相同的逻辑,能得到相同的结果,这样有助于自己对递归的理解。
其实递归真的没那么难,你觉得难可能是一种心理障碍,没有去思索它,缺乏了探索的精神而已。你只需要把每一次递归都当成调用了一次方法,这个方法得到了一个返回结果,这个结果接着又调用了一个跟自己一样逻辑的方法,继续参与了运算,如果反复往返罢了!