/*
* 遞歸:方法自已調用自己
* 遞歸的分類:2種
* 1.直接遞歸稱爲方法自身調用自己
* 2.間接遞歸可以使用A方法調用B方法,B方法調用C方法,C方法再調用A方法
* 注意事項:
* 1.遞歸一定要有條件限定,保證能停止下來,否則會發生棧內存溢出
* 2.在遞歸雖然有限定條件,但是遞歸次數不能太多。否則也會發生棧內存溢出
* 2.構造方法,禁止遞歸
* 學習視頻分享:javacto.taobao.com
*/
遞歸:方法自已調用自己 案例
public class Test01 {
public static void main(String[] args) {
//a();
b(1);
}
/**
* 在遞歸中雖然有限定條件,但是遞歸次數不能太多,否同也會發生棧內存溢出
* 11738 每次不一樣
* 學習視頻分享:javacto.taobao.com
* @param i
*/
private static void b(int i) {
System.out.println(i);
if(i==200000){
return ;
}
b(++i);
}
/**
* 遞歸一定要有條件限定,保證能夠停止下來,否則會發生
* Exception in thread "main" java.lang.StackOverflowError
* 學習視頻分享:javacto.taobao.com
*/
private static void a() {
System.out.println("a方法");
a();
}
/**
* 構造方法禁止遞歸
* 編譯錯誤,構造方法是創建對象使用的,一直遞歸會導致內存中有無數多個對象
* 學習視頻分享:javacto.taobao.com
*/
public Test01(){
//Test01();
}
}
練習:使用遞歸計算1-n之間的和
/**
* 練習:
* 使用遞歸計算1-n之間的和
*/
public class Test02 {
public static void main(String[] args) {
int s = sum(100);
System.out.println(s);
}
/**
* 定義一個方法,使用遞歸計算1-n之間的和
* 1+2+3+..n
* n+(n-1) +(n-1)+..1;
* 已知 最大值n 最小值1
* 使用遞歸必需明確
* 1.遞歸的結束條件 獲取到1的時候結束
* 2.遞歸的目標 獲取下一個被加的數字(n-1)
*
* 學習視頻分享:javacto.taobao.com
*/
private static int sum(int n) {
//獲取到1的時候
if(n==1){
return 1;
}
//獲取下一個被加的數字 (n-1)
return n+sum(n-1);
}
}