1. 程式人生 > >我對遞迴的理解!

我對遞迴的理解!

我沒有怎麼系統的學過遞迴,我只好用例子講了。如下:

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;
    }
}