2017-09-06 83 views
-3

int m = 10;如何通過遞歸實現未知層的嵌套循環?

int n = 9; 

    int p = 4; 

    int q = 7; 

    for(int i=0;i<m;i++){ 

     int a = i; 

     for(int j=0;j<n;j++){ 

      int b = j; 

      if(b==a){ 

       continue; 

      } 

      for(int k=0;k<p;k++){ 

       int c = k; 

       if(c==b || c==a){ 

        continue; 

       } 

       for(int l=0;l<q;l++){ 

        int d = l; 

        if(d==c || d==b || d==a){ 

         continue; 

        } 

        System.out.println("i="+i+",j="+j+",k="+k+",l="+l); 

       } 

      } 

     } 

    } 

例如,代碼片段是四層嵌套循環,和之間的迴路具有數據相關性,和嵌套層是不確定的,它會如何實現通過遞歸(嵌套是不確定的)?

+0

你嘗試過什麼迄今爲止獲得遞歸工作? – tima

+1

我在工作中遇到問題,必須按循環解決,循環次數不確定,必須通過遞歸方法來實現,但我不知道如何去做 –

+0

https://www.javatpoint .com /遞歸在java這個教程告訴你如何使用遞歸.. – Sh4m

回答

0
void recurse(int[] a, int[] b, int depth) { 
    if (depth == a.length) { 
     System.out.println(Arrays.toString(b)); 
     return; 
    } 

    outer: 
    for (int i = 0; i < a[depth]; i++) { 
     for (int j = 0; j < depth; j++) { 
      if (i == b[j]) { 
       continue outer; 
      } 
     } 
     b[depth] = i; 
     recurse(a, b, depth + 1); 
    } 
} 

樣品電話:

recurse(new int[] {10, 9, 4, 7}, new int[4], 0); 
+0

哇,你太棒了!你是怎麼做到的?我很佩服你! –

+0

Stackoverflow真的是一個不錯的地方,感謝stackoverflow.com –

+0

我還有一個問題要問你, 給你兩個整數數組a,b和一個整數c(大於或等於0),加上數組a的所有元素加上整數c等於所有元素的總和數組b的每個元素表示一個事務明細數據,數組b的每個元素表示一個彙總事務數據,整數c代表費用 –