如何用递归替代n 层循环,在线等求助!

email10000 2008-10-07 10:45:20
int [] a = {1,2,3};
for( int i=0;i<a.length;i++){
for( int j=0;j<a.length;j++){
for( int k=0;k<a.length;k++){
for ....
.
.
.
System.out.println(a[i]+""+a[j]+""+a[k]+ ...+a[n]);
.
.
.
}
}
}
}

嵌套n层循环,如何用递归实现?
帮帮我吧,想了半天也没搞定! :(
...全文
579 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
computerlibin 2011-04-29
  • 打赏
  • 举报
回复
我也遇到了这个问题,我问题的背景是3个[1,4]范围的随机数,他们的和是n的概率是多少
如果递归中能调用上层递归声明的变量就好了,那这个问题就解决了,等高人解决
ol_soft 2008-10-20
  • 打赏
  • 举报
回复
学习,我以前也遇到过这样的问题
冰思雨 2008-10-20
  • 打赏
  • 举报
回复
/**
*
*/
package houlei.test;

import java.util.Collection;
import java.util.LinkedList;

/**
* 该类创建于 2008-10-17 下午04:53:56
*
* @version 1.0.0
* @author 侯磊
*/
public class L {

public static void main(String[] args) {
fun(3, new int[] { 1, 2, 3 }, null);
}

/**
* @param level 嵌套的层次
* @param a 待传的数组
* @param rs 首次调用的时候,为null
*/
public static void fun(int level, int a[], int [] rs) {
if (rs == null) rs = new int[a.length];
for (int i = 0; i < a.length; i++) {
if (level <= 0) {
StringBuffer sb = new StringBuffer();
for(int k=0;k<rs.length;k++)sb.append(rs[k]);
System.out.println(sb.toString());
return;
} else {
rs[rs.length-level]=a[i];
fun(level - 1, a, rs);
}
}
}

}
mgoann 2008-10-20
  • 打赏
  • 举报
回复
没看明白是什么意思!!

所以帮不上你的忙!
getter 2008-10-20
  • 打赏
  • 举报
回复
唉 這幾天化這麼多精力在csdn上解答問題,都得不到分...
nine_suns99 2008-10-20
  • 打赏
  • 举报
回复
搬凳子等高人解答
getter 2008-10-20
  • 打赏
  • 举报
回复
按照樓主的意思,是否做個全序列...n個元素有n^n種情況啊...5個元素的結果己很大啦...

public class FromCSDN {

public static void recursionInsteadFor(int n , String str, char[] pk) {
if (n > pk.length) return;
if (n == pk.length) System.out.println(str);
for (int i = 0 ; i < pk.length ; ++ i)
recursionInsteadFor(n + 1, str + pk[i], pk);
}

public static void main(String[] args) {
char[] p = new char[] {'a','b','c','d','e'};
FromCSDN.recursionInsteadFor(0, "", p);
}

}
老冯laofeng 2008-10-20
  • 打赏
  • 举报
回复
没什么看明白,n怎么确定?
关注
老冯laofeng 2008-10-20
  • 打赏
  • 举报
回复
接分
hawkeyes0 2008-10-20
  • 打赏
  • 举报
回复
以三层为例:

public func(int i,int j,int k) {
int ii,jj,kk;
kk++;
if kk > a.length {
kk = 0;
jj++;
}
if jj > a.length {
jj = 0;
ii++;
}
System.out.println(a[i]+","+a[j]+","+a[k]);
func(ii,jj,kk);
}

冰思雨 2008-10-20
  • 打赏
  • 举报
回复
楼主看了我的代码没,应该没什么问题啊
sunjia5451937 2008-10-20
  • 打赏
  • 举报
回复
关注中
pingzi_1119 2008-10-20
  • 打赏
  • 举报
回复
楼主的帖子人气真高啊
估计啥问题都会解决了
哈哈
chandlersong 2008-10-20
  • 打赏
  • 举报
回复
我觉得递归就要考虑两个基本问题。
首先,在一步做了什么之后交给下一层。
其次,达到什么条件就不用继续下一层了,也就是递归结束。
就以你的列子来说吧。
在每一步,就是打印一个数列a的值。然后继续下一步。其中要考虑是不是有重复。
然后结束的话么,就是判断是否打印完成。
wensheng_zh2007 2008-10-08
  • 打赏
  • 举报
回复
这个有点象m进制的n位数的表示
zhuyx808 2008-10-08
  • 打赏
  • 举报
回复
恩,恩帮顶
tanqimin 2008-10-08
  • 打赏
  • 举报
回复
帮顶
TianZhenTian 2008-10-08
  • 打赏
  • 举报
回复
public class Test {
int[] array;

public Test(int[] array) {
this.array = array;
}

public void printArray(int n) {
if (n == 1) {
for (int i = 0; i < array.length; i++) {
doSomething();
}
} else {
n -= 1;
for (int j = 0; j < array.length; j++) {
printArray(n);
}
}

}

private void doSomething() {
// TODO:add any thing you want to do;
}

public static void main(String[] args) {
int[] a = { 1, 2, 3 };
Test t = new Test(a);
t.printArray(3);

}
}
無名VF 2008-10-08
  • 打赏
  • 举报
回复
UP 帮顶!
ThirstyCrow 2008-10-08
  • 打赏
  • 举报
回复
public class SequenceGenerator {

private char[] elements;
private char[] sequence;

public SequenceGenerator(char[] elements, int sequenceLength) {
this.elements = elements;
this.sequence = new char[sequenceLength];
}

public static void main(String[] args) {
new SequenceGenerator(new char[] { '1', '2', '3' }, 5).generate();
}

public void generate() {
generate(0);
}

private void generate(int index) {
for (int i = 0; i < elements.length; i++) {
sequence[index] = elements[i];
if (index + 1 < sequence.length) {
generate(index + 1);
} else {
System.out.println(String.valueOf(sequence));
}
}
}
}
加载更多回复(21)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧