递归模式学习(recursion)
所谓递归,就是方法调用自身。对于递归模式来说,要有一个出口来让递归结束,避免出现死循环。
实例全排列:
从n中拿出m个元素进行排列,当n==m时为全排列。
利用递归就是:把n个元素轮流放入第一个位置,剩余位置全排列(等同于(n-1)全排列+剩余的元素)
设置出口:当n-1等于1时说明递归到最后一个元素,回调。
package com.zhanghaobo.arrangement; /**
* @author Administrator
*排列方法:轮流把数组中元素放入第一个位置,剩余元素全排列(递归),直至剩余元素为1,排列完成。
*begin++当begin==end时说明递归到出口,返回
*/
/**
* @author Administrator
*
*/
public class ArrangementTest { public static void main(String[] args) {
int[] nums=new int[]{1,2};
arrangment(nums, 0, nums.length-1); }
/**
* @param a
* @param begin
* @param end
* 将数组a中的从begin-end位置的元素全排列
*/
public static void arrangment(int[] a,int begin,int end){ if(end==begin){
for(int b:a){
System.out.print(b);
}
System.out.println("");
return;
}
else{
//begin从0开始进行全排列直至begin==end;循环完成一轮后要恢复到原来数组的状态以便下个轮换 for(int i=0;i<=end;i++){
swap(a,begin, i);
arrangment(a,begin+1,end);
swap(a,begin,i);
}
}
} /**
* 其他位置上的元素轮流和begin位置互换,以便其他元素全排列
*/
public static void swap(int[] a,int begin,int other){
int temp=a[begin];
a[begin]=a[other];
a[other]=temp;
}
}
递归模式学习(recursion)的更多相关文章
- State模式学习笔记
选用了一个假设需要用户验证的例子进行State模式学习,这个例子并不恰当.无所谓了,只要能学习到其中的内容即可. 适用性: 1,一个对象的行为取决于他的状态,并且它必须在运行时刻依据状态改变他的行为. ...
- SQL反模式学习笔记1 开篇
什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...
- SQL反模式学习笔记5 外键约束【不用钥匙的入口】
目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...
- SQL反模式学习笔记3 单纯的树
2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...
- SQL反模式学习笔记2 乱穿马路
程序员通常使用逗号分隔的列表来避免在多对多的关系中创建交叉表, 将这种设计方式定义为一种反模式,称为“乱穿马路”. 目标: 存储多属性值,即多对一 反模式:将多个值以格式化的逗号分隔存储在一个字段中 ...
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- SQL反模式学习笔记7 多态关联
目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...
- SQL反模式学习笔记8 多列属性
目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些 ...
随机推荐
- 事件对象event和计时器
事件对象:event 属性: srcElement事件源对象 keyCode 键盘按键Ascii码 window方法: 定时器: 1)setTimeout();//n毫秒后执行一次 2)setInte ...
- 深入理解require/include的顺序
在大型的Web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经常会 ...
- 【英语】Bingo口语笔记(35) - 常见单词结尾发音
- 【解题报告】zju-1145 Dreisam Equations
原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=145 题目大意:在给定的等式右边数字之间加上加.减.乘运算符,使等式成 ...
- mysql 错误代码汇总
1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除 ...
- xsheell的下载安装初级使用
1)关于Xshell 网上更多的资料里提到的SSH客户端是putty,因为简单.开源.免费.但是也正是由于功能过于简单,所以在这里推荐大家使用Xshell. Xshell最初并不能免费使用,而且也没有 ...
- 构建通过 Database.com 提供技术支持的 PhoneGap 应用程序
要求 其他必要产品 Database.com account 用户级别 全部 必需产品 PhoneGap Build 范例文件 Database.Com-PhoneGap-Sample 在这篇文章中, ...
- 为什么从PhoneGap中逃离
我是一名移动应用的开发者,从JAVA 为主的Android到以Objective-C为主的iOS最后到以HTML5为主的跨平台开发,我已经走过了五年多的时光,而我也从一个底层的码农成长为项目负责人. ...
- centos 安装mysql 登录进提示 Access denied for user 'root'@'localhost' (using password: NO)
# service mysqld stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # mysql ...
- 使用RoboCopy 命令
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...