J2SE系列之递归

       递归在编程过程中用到,它的定义是在一个方法内部,对于自身进行调用,直到调用到最小值满足条件

一般来说,递归需要有边界条件递归前进段递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合

一个例子

public class DiGui{

    public static void main(String[] args){
        System.out.println(method(5));
    }
	
	public  static int method (int n){
		if(n == 1){
			return 1;
		}else
		{
			return n*method(n-1);
		}
	}
}

图解


函数一直调用自身,直到返回确定的值,然后一层层向上返回。

递归的的缺点:

递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

应用场景:

在进行树状结构的文件操作的时候,会经常用到递归,例如删除某一个文件及子文件,使用递归删除

 public static void DeleteFolder(string dir)
{
	foreach (string d in Directory.GetFileSystemEntries(dir))
	{
		//判断路径是否存在
		if (File.Exists(d))
		{
			//文件夹下没有子文件
			
			FileInfo fi = new FileInfo(d);
			//去除文件夹的只读属性
			if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
				fi.Attributes = FileAttributes.Normal;
			File.Delete(d);//直接删除其中的文件  
		}
		else
		{
			//文件夹下有子文件
			
			DirectoryInfo d1 = new DirectoryInfo(d);
			if (d1.GetFiles().Length != 0)
			{
				DeleteFolder(d1.FullName);递归删除子文件夹
			}
			Directory.Delete(d);
		}
	}
}


总结:一般树状结构的都可以使用递归查询,比如 查询地区,树状的菜单等等,递归比普通的算法耗内存,谨慎使用。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值