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个案例 可以看出 

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

递归的有点:

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

递归的缺点:

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

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

你可能感兴趣的:(Java,java知识回顾)