`

递归的几种用法

阅读更多

以前一直对递归发怵,一想到它就“浑身哆嗦”,但是递归确实是非常精髓和精妙的,有时候处理问题会非常的方便。比如排序,遍历目录下的文件什么的,但是老这么怕他也不是个办法...

先看一个排序的:
现有122345六个数,要求用一个main函数实现所有不同的排序并打印出来,要求:4不能在第三位,3和5不能相连(某公司笔试题)

	public static List list = new ArrayList();
	/**
	 * 构造字符串的所有排序组合
	 * 
	 * @param str
	 *            将要组合成的字符
	 * @param nstr
	 *            源字符串集
	 */
	public static void group(String str, String nstr) {

		if (str.length() != nstr.length()) {// 如果要生产的字符串不等于原字符串的长度
			String rest = getRest(str, nstr);// 调用转换函数,该方法是得到除了当前字符串以后剩下的字符
			for (int i = 0; i < rest.length(); i++) {
				String temp = str + rest.substring(i, i + 1);

				if (temp.indexOf("4") != 2 && temp.indexOf("35") == -1
						&& temp.indexOf("53") == -1) {
					// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合

					if (!list.contains(temp) && temp.length() == nstr.length()) {
						System.out.println(temp);
						list.add(temp);
					}
					group(temp, nstr);
				}

			}
		}
	}
	/**
	 * 从源字符串集中去除将要组合成的字符
	 * 
	 * @param str
	 *            将要组合成的字符
	 * @param nstr
	 *            源字符串集
	 * @return 剩余字符串集
	 */
	public static String getRest(String str, String nstr) {

		String rest = "";
		if (str.length() < nstr.length()) {// 如果将要组合的字符串<元字符串的长度
			rest = nstr;// 将原字符串赋给rest
			for (int i = 0; i < str.length(); i++) {
				rest = rest.replaceFirst(str.substring(i, i + 1), "");// 把字符串的第I个替换为""
				// 注意此处的replaceFirst,而不是replaceAll
			}
		}
		return rest;
	}



再就是关于目录结构遍历的了:
static void getDir(String str){

		File f = new File(str);
		

		if(f.isDirectory()){
			File[] files = f.listFiles();
			for(int i=0;i<files.length;i++){
				if(files[i].isDirectory()){
					getDir(files[i].getPath());
					System.out.println("--"+files[i].getPath());
				}
			}
		for(int j=0;j<files.length;j++){
			if(files[j].isFile()){
				System.out.println("   "+files[j].getName());
			}
		}
	}



	public static void main(String[] args) {
		group("", "122345");
		// System.out.println(list.toString());
		getDir("F:\\/jQuery API");
	}



其实递归关键要做好两点吧,第一是要找到递归结束的条件,第二是要组织好递归的调用方法
1
0
分享到:
评论

相关推荐

    用递归的方法画分形图

    用递归的方法画分形图 用递归的方法画分形图  分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形,得到新的图形,以此类推,进行若干次变形后得到的图形就是分形图形。Couch曲线是最...

    递归模型神经网络

    我们提出了一种新颖的递归神经网络模型,其能够通过自适应地选择区域或位置序列并且仅以高分辨率处理所选区域来从图像或视频中提取信息。与卷积神经网络一样,该模型具有一定程度的内部平移不变性,但其执行的计算量...

    二叉树的遍历以及非递归遍历、使用遍历器遍历等精粹

    二叉树的遍历以及非递归遍历、使用遍历器遍历等方法。ppt中使用高校课件资源,对二叉树的各种非递归遍历方式进行细致的讲解。特别是后序遍历的几种方法,课件上使用了不同的方法讲解,值得深入的思考和探究。

    PHP实现递归目录的5种方法

    这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。 方法一:使用glob循环 &lt;?php //方法一:使用glob循环 function myscandir1($path, &$arr) { foreach (glob($path) as $file) { if (is...

    PHP实现无限级分类(不使用递归)

    几种常见的实现方法,各有利弊。其中“改进前序遍历树”数据结构,便于输出和查询,但是在移动分类和常规理解上有些复杂。 2.数据结构 &lt;?php $list = array( array('id'=&gt;1, 'fid'=&gt;0, 'title' =&gt; '中国'), ...

    一种少数点FFT递归算法* (2006年)

    给出了一种只求有限谱线的高效方法的递归表达式及推导过程,以及在使用此方法的旋转因子的规范化处理方法,比较了此方法与传统方法的时间与空间的效率,得出此方法在计算谱线数少于层数时具有更高的效率,而占用空间...

    C#实现斐波那契数列的几种方法整理

    又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……想必看到这个数列大家很容易的就推算出来后面好几项的值,那么到底有什么规律,简单说,就是前两项的和是第三项的值,用递归算法计第50位多少...

    php函数mkdir实现递归创建层级目录

    这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法。 php默认的mkdir一次只能创建一层目录,而要逐层创建各级目录的话,一般都是先从父创建,然后逐层往下创建,但是这样手工创建的话,有点太...

    ASP.NET (C#) 就业笔试题 面试题

    附“卓越招聘题” 面试ASP.NET程序员的笔试题和机试题 面试 一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷 ...1.new有几种用法 第一种:new Class(); 第二种:覆盖方法 public new XXXX(){} ........

    lambda-recurse:递归执行当前的Lambda函数,直到满足用户定义的条件

    有几种用例以递归方式调用lambda 长期运行的计算任务范例 事件化AWS资源的状态 在以下情况下执行X事物/函数/调用: 启动的EC2实例已准备就绪,并且状态检查已通过 新创建的RDS数据库实例已准备就绪 importImage...

    深度递归回归用于人脸地标检测

    我们基于深度卷积和反卷积网络,再经过精心设计的递归网络结构,提出了一种新颖的端到端深度架构,用于人脸界标检测。... 对几个基准数据集的广泛评估表明,与最先进的方法相比,该提议的深层体系结构具有出色的性能。

    算法特性和基本概念、五个重要的特征、复杂性、六种常用多项式时间算法、各种排序算法比较选择、算法优化的几种常用方法和常用算法分析

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。

    C#绝对经典面试题及解答

    131个,够多的吧 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34.........6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

    ASP.NET面试题,C#面试题300题

    6.如果在一个b/s结构的系统中需要传递变量值,但是又不能使用session、cookie、application,您有几种方法进行处理? 7.请编程遍历页面上所有textbox控件并给它赋值为string.empty? 8.请编程实现一个冒泡排序...

    x空间中改进的Epstein-Glaser重归一化与差分重归一化

    这使我们能够以几种循环顺序显示四点和两点函数的摄动展开。 为了处理内部顶点,我们阐述并扩展了对数齐次分布的卷积理论。 这种方法与Freedman,Johnson和Latorre提出的差分重新规范化有很多共同点。 但重要细节...

    DRSA:深度循环生存分析,这是一种自动审查的深度模型,用于具有审查处理的事件时间数据分析。 我们AAAI 2019论文的实现以及几种(Python)实施的生存分析方法的基准

    生存分析是统计研究中使用数据审查处理为事件到时间信息建模的一个热点,它已广泛用于许多应用中,例如临床研究,信息系统和存在生存偏差的其他领域。 从传统的统计方法到机器学习模型,已经提出了许多用于生存分析...

    C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少

    本文主要介绍三种方法,解决面试中常见的问题,求第30位数是多少的问题,希望能给大家一个参考。

    oak:现代的递归目录列表实用程序(实验性)

    它以递归方式列出目录和文件,以可视化其层次结构。 该项目处于试验阶段,我会在几天内愉快地响应问题并提出要求。基本用法 $ oak.├── Cargo.lock├── Cargo.toml├── LICENSE├── README.md└── src ├...

    python程序设计课件3

    创建函数的语法 函数的调用方法 函数的几种常见参数的定义及使用 嵌套函数的使用 递归函数的使用 变量的作用域 模块的创建和导入 模块包的概念与使用

    ASP.NET面试题

    . 简述 private、 protected、 public、 internal 修饰符的访问权限...6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer

Global site tag (gtag.js) - Google Analytics