java 递归

递归

        递归的概述 :递归指的是在方法内自身调用自身的现象

递归使用的前提

        1.使用递归时,一定要使用条件判断来判断是否跳出递归 否则会出现溢出栈的错误

        2.在递归中虽然有条件限制 但是也不能进行多次递归,不然也会出现溢出栈的错误

        3.构造方法是不能递归的

        4.每次递归传入的值都需要发生改变,不然会发生栈溢出

递归的优缺点

        优点:实现简单,可读性好
        缺点:递归调用,占用空间大(每一次函数的调用都要开辟相应的空间)

递归的原理

        每次调用自身都会有自己的参数(以某种方式扩大或者缩小)并且每一次调用都会有一次判断是返回值还是继续进行递归(一般都在递归的开头),当程序执行完最后一层递归调用后,参数变量满足了递归出口的条件就开始逐级返回。

递归的分类

         递归有两种递归的方式分别为 间接递归 和 直接递归

      直接递归 :即自身调用自身,如代码所示调用递归这个方法 传入一个int类型的参数 进入递归循环会先判断这个值是否大于等于10 如果大于十则会返回该参数 如果小于十 就会进行递归 参数会在自身调用自身方法时进行自加一直到自身大于等于十才会退出递归

//有返回值类型
public int recursive(int a){
//如果a大于等于10则会结束递归    
    if(a>=10){  //方法出口
        return a;
    }
    return recursive(++a); // 递归
}
//无返回值类型
public void recursive(int a){ 
//如果a大于等于10则会结束递归
    if(a>=10){  //方法出口
        return a;
    }
    recursive(++a); // 递归
}

                间接递归 :A调用B B调用C C调用A

        

     //A方法
public int A(int a){
        //程序出口
        if(a>10){
            return a;
        }
        //调用B
        return  B(++a);
    }
    B方法
public int B(int a){
        //调用C
       return C(++a);
    }
    C方法
public int C(int a){
        //调用A
        return A(++a);
    }

//此时我们通过给间接递归传入一个参数 1 A方法返回了一个 11

练习

使用递归求斐波那契数列第N位数字
 int fib(int n){
        if (n<2) {
            return n;
        } else {
            return fib(n-1) + fib(n-2);
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值