方法递归的使用和理解

##一.什么场景会用到递归方法?

  1. 原问题可以拆分成多个子问题;
  2. 拆分后的子问题和原问题除了规模/大小不同之外,解决的思路完全相同;
  3. 存在递归的终止条件(拆分子问题的过程是有限的,拆分到最后一个子问题的终止条件)。
    例:在计算5!时,可以把它拆分成 5 * 4!的形式,
    4!就可以看作5!拆分出的一个子问题。
    拆分出的子问题可以继续拆分:
    4!=4* 3!

    2 !=2* 1!;
    当我们拆分到1!时,不能继续差分,1!=1就看做这个递归方法的终止条件。
    ##二.如何正确写出递归函数?
    1.抓语义,明白这个递归函数在解决什么问题;
    2.假设这个函数已经写好了,利用这个函数解决已经拆分出来的子问题;
    3.把握递归的终止条件
    (抓语义、找终止、写当前)
  public static int getfactorial(int n){
        //n<=2就是这个递归方法的终止条件,因为当n<=2时,n的阶乘就是它本身
        if (n<=2){return n;}
        //把n的阶乘拆分成 n*(n-1)!的子问题
        return n*getfactorial(n-1);
    }

##三.从方法底层原理看待递归
递归本质上就是方法不断地压栈和弹栈的过程。
在这里插入图片描述
##四.设计一个方法,删除文件夹

public void deleteFile(File file){
        //先确定file是个文档还是一个文件夹
        File[] files=file.listFiles();
        //如果数组存在,表明file是个文件夹
        if(files!=null){
            //如果数组非空,先删除文件夹里的全部东西
            if (files.length!=0){
                for (File f:files){
                    //递归调用deleteFile方法,删除所有file的子文件夹
                    deleteFile(f);
                }
            }
        }
        file.delete();
    }
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值