java递归

递归思想:

递归就是自己在自己的方法里面调用自己。

使用递归时,必须有明确的结束条件,不然容易造成死循环。

递归方法使代码显得更简洁,但是效率特别低,所以一般不推荐使用。

在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出。

使用递归还要考虑例如int类型值的范围问题。

递归实现起来最关键的是处理好基础情形。

举个栗子:

爬楼梯递归:

例如:有n层楼梯,每步可以走一层或者走两层,那么走n层一共有多少种方式。

    @Test
    public void test2(){
        System.out.println(climbStair(5));
    }

    /**
     * 爬楼梯递归算法
     * @param n
     * @return
     */
    public static int climbStair(int n) {
        if (n == 0) {
            return 0;
        }else if (n==1){
            return 1;
        }else if (n == 2) {
            return 2;
        }else{
            return climbStair(n - 1) + climbStair(n - 2);
        }
    }

分析一下这个算法:
A:如果有0个台阶,那么有0种走法,这个不用多说;
B:如果有1个台阶,那么有1种走法;
C:如果有2个台阶,那么有2种走法(一次走1个,走两次;一次走两个);
以上的B和C就是基础情形。
D:接下来就是递归了,如果台阶数目多于2个,那么首先第一步就有两种选择:第一次走1个,或者第一次走两个。这样除了第一次后边的走法就有了两种情形:climbStairs(n-1)和climbStairs(n-2)。这样一直递归下去,直到出现到了基础情形(即n=1或n=2的情形),递归到这个地方(基础情形),然后开始回溯 ,这就是所说的和递归密切相关的“回溯”了。回溯,顾名思义就是从结果倒着回去,找到整个过程,进而分析这个路径或者说是实现的过程。
原文鏈接

https://blog.csdn.net/ares_xxm/article/details/68957829

https://www.cnblogs.com/ipetergo/p/6544336.html


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值