java中的递归

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

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

递归的分类

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

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

     间接递归可以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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值