2017-06-10 34 views
0

例如用於深度2,如果號碼是找到除數和他們的除數等以一定深度

18 
level 1: 1 2 3 6 9 18 
level 2: 1 1 2 1 3 1 2 3 6 1 3 9 1 2 3 6 9 18 

如果算法尋找一些單一分頻器以下

static Integer [] divider(int n) { 
    List<Integer> resultList = new ArrayList<Integer>(); 
    Integer [] result; 
    for (int i = 1; i <= n/2; i++) { 
     if (n%i == 0) 
      resultList.add(i); 
    } 
    resultList.add(n); 
    result = resultList.toArray(new Integer[resultList.size()]); 

    return result; 
} 

我不知道環應該如何

for(int i=1;i<depth;i++){ 
divisors(n); 

} 

回答

0
static Integer [] divider(int n, int level) { 
    List<Integer> resultList = new ArrayList<Integer>(); 
    Integer [] result; 
    for (int i = 1; i <= n/2; i++) { 
     if (n%i == 0) { 
      if(level > 1){ 
       Integer [] divList = divider(i, level-1); 
       for(Integer div : divList) { 
        resultList.add(div); 
       } 
      } 
      else 
       resultList.add(i); 
     } 
    } 
    resultList.add(n); 
    result = resultList.toArray(new Integer[resultList.size()]); 

    return result; 
    } 

以上是針對您的問題的遞歸解決方案。基本上,它所做的是遞歸地調用你的分隔器函數並跟蹤它的當前「級別」。如果它正在計算的數字在1以上的水平,那麼除數將被計算並添加到resultList中。如果不是,它只會將除數本身添加到resultList。這樣你就不需要設置任何混亂的循環結構或重用任何代碼。

相關問題