代码来自于:
http://shmilyaw-hotmail-com.iteye.com/blog/1721523
这段代码看了好久才看懂,真为自己的智商捉急。
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1);
}
}
}
}
递归实现的时候,在每次入栈的时候都会保存执行到哪里了的地址,在出栈的时候,从没有执行的代码开始执行。
在进栈的下面我加上一段没有执行的代码。system.out.println();
第一次进栈的时候
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1); //进栈前i=1,在下次出栈的时候,从i=2,开始执行。进栈的时候执行到什么地方,下次就从什么地方开始执行。
system.out.println(); //未执行代码,下次出栈的时候将从这里开始执行
}
}
}
}
第二次进栈的时候:
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1); //进栈前i=2,在下次出栈的时候,从i=3,开始执行。进栈的时候执行到什么地方,下次就从什么地方开始执行。
system.out.println(); //未执行代码,下次出栈的时候将从这里开始执行
}
}
}
}
今天傻逼看了半天才看明白。
分享到:
相关推荐
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人...这种算法常用递归或迭代来实现,单当M=14时,中间结果数量已经过亿,再大的话很容易超过单台机器的处理能力,所以我用hadoop来实现多机分别处理。
本资源附带文档解释了排列组合算法的实现和原理。其中排列算法是基于递归实现的,组合算法是基于高效的位移法实现的。代码是使用Java版实现的。
排列与组合的Java递归实现.doc
java m取n 重复 不重复 排列组合 for循环嵌套递归
java 用递归实现字符串反转 java 用递归实现字符串反转
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
约瑟夫环是一个数学的应用问题: ...网上看到很多实现,唯独Java实现不好找,自己构思了一下思路,用递归的方式实现了一个Java版的约瑟夫问题解决方案,代码简洁,思路清晰,请各位同行参考,欢迎交流。
易语言递归法取排列组合例程源码,递归法取排列组合例程,子程序_取组合
递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...
打印1到10的阶乘 学习递归的好实例
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
一个简单的小例子递归实现list按照index排序的树
Java排列组合_组合算法,利用list及set的无序性, 通过递归实现,不同于以往的排列组合 自娱自乐
网上绝大部分java递归实现字符串反转缺少字符串判空条件,我加了上去。
自己实现的递归寻路的算法。用到了穷举效率不是很高。 不过递归和回溯算法超经典。以城市地图为例,根据权重,找到最佳路径。文档源码详解。大家可以看看。
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
java代码-使用Java递归求和1+2+3+...+n的源代码 ——学习参考资料:仅用于个人学习使用!
用java语言编程实现拉了对文件夹的删除,可以删除文件夹本身及其子文件夹。
主要介绍了Java递归算法遍历部门代码示例,具有一定借鉴价值,需要的朋友可以参考下。
易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法...