从零开始复习Java-递归

递归

概念

甲方法调用乙方法,这是方法的调用。

甲方法调用甲方法,自己调用自己,这就是递归。

如下例,在test方法中循环调用test方法,一个递归的基础应用,会一直输出“hello barnes”

public String test(){
    System.out.println("hello barnes");
    test();
}

递归可以使用一些简单的程序来实现复杂的问题,它用规模较小的、与大问题相似的少量程序就可以描述出过程中所需要的多次重复计算,可以极大的减少代码量。给递归下一个定义,那就是用有限的语句定义对象的无限集合。

结构

递归结构分为2个部分,递归头和递归体,guitou。

递归头决定什么时候跳出循环,即不调用自身方法,如果没有该递归头,就会进入死循环

递归体决定什么时候需要调用自身方法。

使用递归实现阶乘:

public class Factorial{
    public static void main(String[] args){
        new Scanner = Scanner sc;
        System.out.println(fac(5));
    }
    
    public static int fac(int n){
        if(n == 1){
            return 1;
        }else{
            return n*fac(n-1);
        }
    }
}

代码量虽然减少,但对电脑来说要进行的工作量却变多,随着递归次数的增长,该方法的时间空间复杂度都是成指数上升的,可能Java栈直接溢出了,直接卡死或者崩溃。所以在实际的生产中,能不用递归尽量就不用递归。

你可能感兴趣的:(从零开始复习Java-递归)