多层for循环转递归(Java)
public class Test {
public static void main(String[] args) {
int x=555;
outer:for(int i = 0; i <10;i++){
for (int j = 0; j < 10;j++) {
for(int k= 0; k <10; k++){
if(x==(i*100+j*10+k)){
break outer;
}
之前写了一个简单的三层for循环,想转换为递归的形式,研究了一下得到下面的形式的方法。
public class Test {
public static void main(String[] args) {
int x = 555;
findx(x,0, new int[]{0, 0, 0});
public static boolean findx(int x, int index, int[] ijk){
boolean success;
ijk[index]=0;
while (ijk[index]<10) {
if (index <= 1) {
success=findx(x, index + 1, ijk);
if (success) return success;
if (index == 2 ) {
System.out.println(ijk[0] * 100 + ijk[1] * 10 + ijk[2]);
if(x == (ijk[0] * 100 + ijk[1] * 10 + ijk[2])) {
return true;
ijk[index]++;
return false;
}
index对应for循环的循环层数,ijk数组内部三个数分别对应每层for循环里面三个循环时的i、j、k,当满足目标时,依次跳出递归。
如果是循环层数继续增加到n层,每层循环m次,得统一的循环结构:
for (int count1 = 0; count1 < m1 ; count1++) {
//代码块1
for (int count2 = 0; count2 < m2 ; count2++) {
for (int count3 = 0; count3 < m3 ; count3++){
for (int countn = 0; countn < mn ; countn++){
//代码块n
}
转换为递归形式得到
public static void for_to_recursive(int index, int[] count,int n,int[] m){
if(index>=n)return;
count[index]=0;