2017-06-10 3 views
0

数の単一仕切りを見つけるためのアルゴリズムは検索除数とその約数と一定の深さに

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; 
} 

次私は確認していないされている場合数は

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 

ある場合ループはどうあるべきか

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に追加するだけです。こうすることで、面倒なループ構造を設定したり、コードを再利用する必要はありません。

関連する問題