我对递归的理解!

我没有怎么系统的学过递归,我只好用例子讲了。如下:

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

猜你喜欢

转载自blog.csdn.net/qq_31681017/article/details/72935027