递归包含两个主要的部分:
- 基线条件---决定何种情况下退出递归
- 递归条件---决定何种情况下进入下次递归
本质上递归就是方法自己调用自己,循环调用自己,所以一定要注意基线条件的设置,并且要保证一定不要出现调用栈太深,导致OOM.
下面是一个小的递归求和的例子:
public static void main(String[] args) {
List<Integer> initList = new ArrayList<>();
initList.add(1);
initList.add(2);
initList.add(3);
Integer sum = sum( initList);
System.out.println(sum);
}
public static Integer sum( List<Integer> initList){
Integer sum = 0;
if(initList.size() == 0){
return sum;
}else {
Integer remove = initList.remove(0);
Integer sum1 = sum(initList);
sum = sum1 + remove;
return sum;
}
}
上面例子中,集合长度为O即为基线条件,else中的部分为递归条件。理解了这两点递归基本就没有什么问题了。