2014-10-22 2 views
0

У меня есть рекурсивный метод, который я пытаюсь выполнить. Там, где он добавляет элементы в массив сбалансированным образом в двоичном дереве поиска.Рекурсия Бесконечный цикл в java

public void addBalanced(String file){ 
    addToArrayList(file); 
    addBalanced(a,0, a.size()-1); 
} 
private void addBalanced(ArrayList<String> list,int start, int end){ 
    int middle = (start+end)/2; 
    bst.add(list.get(middle)); 
    if(list.size() == 0){ 
     return; 
    }else if (list.size() == 1){ 
     bst.add(a.get(0)); 
    } else if(start >= end){ 
     return; 
    } 
    addBalanced(list,start, middle-1); 
    addBalanced(list,middle+1, end); 

} 

Переменные а список массива, который является и др количеством строк, что файл состоит из Переменной BST является бинарным деревом поиска

Он находится в бесконечном цикле, что я могу сказать и не уверен, как это исправить. Я попытался добавить базовый регистр для массива размером 0 и 1, но он все еще застрял в цикле.

public static void main(String[] args) { 
    BSTSpellChecker<String> foo = new BSTSpellChecker<>(); 
    foo.addBalanced(foo.getFilePath()); 

} 

Это тестовая текстовый файл:

ааа aahed aahing ахов Aardvark трубкозубов Aardwolf абы абака растерялся счетов абаки корм Abalon

+0

отправить тестовый пример, который приводит к бесконечному циклу – njzk2

+0

Он никогда не перестает работать. У меня это работало как 10 минут подряд без результата с файлом с 15 словами. – jmurphy1267

+1

есть. поэтому отправьте тестовый пример. см. http://sscce.org/ – njzk2

ответ

0

Если начальный размер list является 1 он никогда не остановится

List не изменяется внутри метода. Так что размер не может быть равен нулю. Если размер 1, второй else if блок исполняется каждый раз, не переходит в третий

Смежные вопросы