Я разработал рекурсивный алгоритм для поиска числа детей в строке. Строка представляет собой массив, такой как [1,0,1,0,1]. Там три возможных ребенка этой строки, которые являются [0,0,1,0,1], [1,0,0,0,1] и [1,0,1,0,0]. Таким образом, критерии для создания дочерних элементов - это уменьшение только одной ненулевой записи в строке. Поскольку в [1,0,1,0,1] имеется три ненулевых элемента, то есть три возможных дочерних элемента. Продолжая таким образом, у каждого ребенка теперь могут быть два возможных ребенка и так далее. Рекурсия останавливается, когда в строке есть только одна ненулевая запись.Как вычислить число childern в дереве с помощью рекурсии
Это мой код:
public class Recursion {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int[] c={1,0,1,0,1};
System.out.println(num(c));
}
private static int num(int[] v){
if(numChildren(v)==1){
return 1;
}
else{
int[][] ge=children(v);
for(int[] e:ge){
return 1+num(e);
}
System.out.print("this return should never execute");
return 0;
}
}
private static int numChildren(int[] val){
int sum=0;
for(int i=0;i<val.length;i++){
if(val[i]!=0){
sum+=1;
}
}
return sum;
}
private static int[][] children(int[] p){
int pChildern=numChildren(p);
int[] d=new int[pChildern];
int[][] r=new int[pChildern][];
int c=0;
for(int j=0;j<p.length;j++){
if(p[j]!=0){
d[c]=j;
c++;
}
}
for(int i=0;i<pChildern;i++){
p[d[i]]--;
r[i]=p.clone();
p[d[i]]++;
}
return r;
}
}
Мой код делает казнить, но не дает правильный результат. Он должен печатать 6, но печатает 3.
Может ли кто-нибудь предложить мне, что не так с этим кодом?
Вы пишете Я допустил эту ошибку. Однако даже после коррекции результат недействителен. Например, число возможных детей для [4,4,1,1,1] составляет 200. Но код создает 69300, что является неправильным. – user3212493