我對遞迴的理解!
阿新 • • 發佈:2018-12-30
我沒有怎麼系統的學過遞迴,我只好用例子講了。如下:
class Demo
{
public static void main(String[] args){
doubleNum(1237);
Num(10);
}
public static void doubleNum(int n)
{
System.out.println(n);
if(n<=5000)
doubleNum(n*2);
System.out.println(n);
}
public static void Num(int n)
{
if(n!=1)
Num(n-1);
System.out.println(n);
}
}
上面執行的結果為:
1237
2474
4948
9896
9896
4948
2474
1237
1
2
3
4
5
6
7
8
9
10
根據上面的結果我們來分析:
public static void doubleNum(int n)
{
System.out.println(n);
if(n<=5000)
doubleNum(n*2 );
System.out.println(n);
}
當我們呼叫doubleNum(1237)傳入1237數值
->sop(1237)
->判斷條件滿足:呼叫方法doubleNum(1237*2)
->sop(2474)
…直到n*2>5000(這時我們已經打印出了:1237,2474,4948,9896)
->結束了裡面呼叫方法,但是整個方法還沒有結束相當於
{ --sop(1237){ ----sop(2474){ -------sop(4948){ ---------sop(9896) if條件不滿足 ---------sop(9896) ------ }sop(4948) ----}sop(2474) --}sop(1237) }
上面的sop是輸出的意思!!!
public static int diGui(int num){
if(num<=2){
return 1;
}else{
return diGui(num-1)+diGui(num-2);
}
}
上面是斐波拉契數列的遞迴(換個思路就是倒著推)
{
-----{
-------{
---------{
-----------{
1、(num-2)==1時return 1;
則、(num-1)==2時return 1;
------------}
num=3,return 1+1;2
----------}
num=4,return (1+1)+1;3
-------}
num=5,return 2+3;5
----}
num=6,return 3+5;8
}
可能表達不太恰當,希望多多諒解!!
下面還有個例子:輸出sop(abc123);懂了上面的理解下面的應該不是很難!
class Demo4
{
public static void main(String[] args){
String str = DiGui("abc",3);
System.out.println(str);
}
public static String DiGui(String str,int i){
if(i>=1){
return DiGui(str,i-1)+i;
}
return str;
}
}