怎么理解递归

怎么理解递归?

这是一个曾经困扰过我的一个问题,简单理解:

  1. 递归就是方法自己调用自己
  2. 编写的时候一定要有一个结束条件,否则将会造成StackOverflowError的错误。

先来看一个栗子:
当我们需要计算1 ~ n 的和时,一般的代码会这么写:

public static void main(String[] args){

    int n = 5;

    //调用该方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//1-N的求和.
public static int sum(int n){

    int sum = 0;

    for(int i=0;i<=n;i++){
        sum += i;
    }

    return sum;
}

使用递归时,代码如下:

public static void main(String[] args){

    int n = 5;

    //调用该方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//该方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){

    if(n==1){
        return 1;
    }else{
        return n + sum(n-1);
    }

}

那我们来理解一下什么叫做 “ 自己调自己 ” 吧!

public static void main(String[] args){

    int n = 5;

    //调用该方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//该方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){  //第一次执行:n=5;第二次执行:sum(4)...

    if(n==1){                          //第一次:n=5,所以不执行;第二次执行:n=4,所以不执行;...
        return 1;                      //第五次执行n==1,return = 1;
    }else{                
        return n + sum(n-1);        // 第一次执行: 5 + sum(5-1)  即为 :5 + sum(4) 
                                    // 第二次执行: 4 + sum(4-1)  即为 :4 + sum(3) 
                                   //...3-1, 3 + sum(2)
                                   //第四次执行: 2 + sum(,2-1)  即为 :2 + sum(1)
    }        

}

结果是多少自己算算,哈哈

你可能感兴趣的:(怎么理解递归)