java 递归思想的理解

递归

递归方法是调用自身的方法

看一个阶乘的demo


public class Main  {
    /**
     *  5*4*3*2*1
     * @param n
     * @return
     */
    public static int Method(int n){
        if (n==1){
            return 1;
        }else{
            return n * Method(n-1);
        }
    }
    public static void main(String[] args){
      System.out.print(Method(5)); //120
    }
}

n= 5的时候 走else 里面 返回的是5*Method(4)  然后接着走Method()方法 5*4*Method(3) 接着走5*4*3*Method(2)

然后走到1 的时候 停止了,return 1 else方法不在走了,那就是 5*4*3*2*1  这个过程就是想要的结果,

所以呢,我们使用递归的时候需要注意

1 递归停止的判断 

2 递归的进行体(就是他的算法) 

 

为了加深理解在举一个案例

 斐波那契数列

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 .......

这样的一系列数字,后面一项是其前面2项之后

例如当前5 设置为n 其前面一项为n-1 其前面2项为n-2   

计算某一项的公式为(n-1) +(n-2)  


public class Main  {
    /**
     *   1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 .......
     * @param n
     * @return
     */
    public static int Method(int n){
        if (n==1 || n==2){
            return 1;
        }else{
            return Method(n-1) + Method(n-2);
        }
    }
    public static void main(String[] args){
      System.out.print(Method(5));
    }
}

2个案例 可以看出 

递归 一定要有一个终止其结束的条件,以及一个运算的方法体.. 

递归的有点:

代码更简洁清晰,可读性更好

递归的缺点:

递归调用函数,浪费空间;

递归太深容易造成堆栈的溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值