怎么理解递归?
这是一个曾经困扰过我的一个问题,简单理解:
- 递归就是方法自己调用自己
- 编写的时候一定要有一个结束条件,否则将会造成StackOverflowError的错误。
先来看一个栗子:
当我们需要计算1 ~ n 的和时,一般的代码会这么写:
public static void main(String[] args){
int n = 5;
//调用该方法完成1-N的求和
int result = sum(n);
System.out.println(result);
}
//1-N的求和.
public static int sum(int n){
int sum = 0;
for(int i=0;i<=n;i++){
sum += i;
}
return sum;
}
使用递归时,代码如下:
public static void main(String[] args){
int n = 5;
//调用该方法完成1-N的求和
int result = sum(n);
System.out.println(result);
}
//该方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){
if(n==1){
return 1;
}else{
return n + sum(n-1);
}
}
那我们来理解一下什么叫做 “ 自己调自己 ” 吧!
public static void main(String[] args){
int n = 5;
//调用该方法完成1-N的求和
int result = sum(n);
System.out.println(result);
}
//该方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){ //第一次执行:n=5;第二次执行:sum(4)...
if(n==1){ //第一次:n=5,所以不执行;第二次执行:n=4,所以不执行;...
return 1; //第五次执行n==1,return = 1;
}else{
return n + sum(n-1); // 第一次执行: 5 + sum(5-1) 即为 :5 + sum(4)
// 第二次执行: 4 + sum(4-1) 即为 :4 + sum(3)
//...3-1, 3 + sum(2)
//第四次执行: 2 + sum(,2-1) 即为 :2 + sum(1)
}
}
结果是多少自己算算,哈哈