java中的递归

血红的双手。 提交于 2020-01-30 17:25:59

今天我们就来说说递归  白话讲:就是自己调用自己

递归:指在当前方法内调用自己的这种现象

递归的分类

      递归分为两类,直接递归和间接递归

     直接递归称为方法自身调用自己

     间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法

    递归的注意事项

      递归一定要有条件限定,保证递归能够停止下来,否则会发生内存溢出

      在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出

      构造方法禁止递归,为何了:因为构造方法是创建对象使用的,总不能让对象一直创建下去把。

     代码演示递归

   


public class Demo7 {
    public static void main(String[] args) {
           digui(1);
    }
    //定义一个静态方法
    private static void digui(int i){
        System.out.println(i);
        digui(++i);
    }
}

//结果如下图所示

 

我们加个条件试试

public class Demo7 {
    public static void main(String[] args) {
           digui(1);
    }
    //定义一个静态方法
    private static void digui(int i){
        System.out.println(i);
        //我们来添加一个递归结束的限定条件
        if(i == 5000){
            return;//结束方法
        }
        digui(++i);
    }
}

这样就不会出现栈内存 溢出了

我们来做个Demo

我们来计算1到10的和

采用递归:代码如下

分析:num的累和=num+(num-1)的总和,所以可以把累和的操作定义成一个方法,递归调用。

public class DiguiSumDemo {
    public static void main(String[] args) {
       //计算1到num的和,使用递归完成
       int num = 10;
       //调用求和的服务
        int sum = getSum(num);
        System.out.println(sum);
    }

    /**
     * 通过递归算法实现
     * @return
     */
    private static int getSum(int num) {
        /*
         num为1时,方法返回1,相当于是方法的出口,num总有是1的情况
              */
        if(num == 1){
            return 1;
        }
        /*num不为1时,方法返回 num +(num‐1)的累和 递归调用getSum方法 */
        return num + getSum(num - 1);
    }
}

//打印得到
55

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!