怎么理解遞歸?
這是一個曾經(jīng)困擾過我的一個問題,簡單理解:
- 遞歸就是方法自己調(diào)用自己
- 編寫的時候一定要有一個結(jié)束條件,否則將會造成StackOverflowError的錯誤。
先來看一個栗子:
當(dāng)我們需要計算1 ~ n 的和時,一般的代碼會這么寫:
public static void main(String[] args){
int n = 5;
//調(diào)用該方法完成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;
//調(diào)用該方法完成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);
}
}
那我們來理解一下什么叫做 “ 自己調(diào)自己 ” 吧!
public static void main(String[] args){
int n = 5;
//調(diào)用該方法完成1-N的求和
int result = sum(n);
System.out.println(result);
}
//該方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){ //第一次執(zhí)行:n=5;第二次執(zhí)行:sum(4)...
if(n==1){ //第一次:n=5,所以不執(zhí)行;第二次執(zhí)行:n=4,所以不執(zhí)行;...
return 1; //第五次執(zhí)行n==1,return = 1;
}else{
return n + sum(n-1); // 第一次執(zhí)行: 5 + sum(5-1) 即為 :5 + sum(4)
// 第二次執(zhí)行: 4 + sum(4-1) 即為 :4 + sum(3)
//...3-1, 3 + sum(2)
//第四次執(zhí)行: 2 + sum(,2-1) 即為 :2 + sum(1)
}
}
結(jié)果是多少自己算算,哈哈