遞迴的基本使用以及經典案例
阿新 • • 發佈:2018-12-13
遞迴:方法自己呼叫自己 遞迴的分類:遞迴分為兩種,直接遞迴和間接遞迴 直接遞迴稱為方法自身呼叫自己 間接遞迴可以A方法呼叫B方法,B方法呼叫C方法,C方法呼叫A方法 注意事項: 遞迴一定要有條件限定,保證遞迴能夠停止下來,否則會發生棧記憶體溢位 在遞迴中雖然有限定條件,但是遞迴次數不能太多,否則也會發生棧記憶體溢位 構造方法,禁止遞迴//編譯報錯:構造方法是建立物件使用的,一直遞迴會導致記憶體中有無數多個物件, 直接編譯報錯
當呼叫方法的時候,方法的主體不變,每次呼叫 方法的引數不同,可以使用遞迴
經典案例一:求1-n的和
public class QiuHeDiGui {
public static void main(String[] args) {
System.out.println(sum(3));
}
private static int sum(int n) {
if(n==1){
return 1;
}
return n+sum(n-1);
}
}
注意:
使用遞迴求和,main方法呼叫sum方法,sum方法會一直呼叫sum方法
導致在記憶體中有多個sum方法(頻繁的建立方法,呼叫方法)效率低下
所以如果僅僅是計算1-n之間的和,不推薦使用遞迴,使用for迴圈即可
經典案例二:用遞迴實現不死神兔
故事得從西元1202年說起,話說有一位義大利青年,名叫斐波那契。
在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔,
再過一個月就能生下一對小兔,並且此後每個月都生一對小兔,沒有發生死亡,
問:現有一對剛出生的兔子2年後(24個月)會有多少對兔子?
案例分析,找到規律你會發現,從第三天起,面一天兔子的數目是前一天兔子數目加上前兩天兔子之和,因為前一天的兔子裡面只有前兩天的兔子才能生小兔子。
所以n(當天的兔子數目)=(n-1)(當天的兔子數目)+(n-2)(當天的兔子數目)
public class TestTZ02 {
public static void main(String[] args) {
System.out.println(method(24));
}
public static int method(int n) {
if(n==1){
return 1;
}else if(n==2){
return 1;
}else {
return method(n-1)+method(n-2);
}
}
}