2016-07-06 2 views
1

Может ли кто-нибудь помочь мне с логикой рекурсии? У меня есть объект итератора, на котором я повторяю использование цикла while. Затем в каждом итерированном объекте я снова должен повторять и так далее.Логика рекурсии от итерации по итератору и т. Д.

private void handleRecursiveMethod(someMethod) { 
        Iterator<Sometype> methods=doingSomething(someMethod)); 
        while(methods.hasNext()){ 
         printingDetailsAboutThisMethod(methods.next()) 
         // Again with each method I have to do same 
         // operation until methods.hasNext becomes false. 
         handleRecursiveMethod(methods.next()); 
         // By calling this, it does not complete while 
         // loop first time. 
        } 
} 
+0

Вам нужен тип параметра 'someMethod', прежде чем вы сможете что-либо сделать. –

+0

Просто предположим, что есть какой-то Тип. Я хотел спросить о логике рекурсии. – marion

+0

Это не рекурсивная логика. Это итеративная логика. Я смущен тем, что вы просите. –

ответ

1

Ваша функция переходит в цикл while, пока итератор не имеет больше записей для повторения. Поэтому я думаю, что когда вы вызываете handleRecursiveMethod(methods.next()); в конце метода, он должен бросить вас NoSuchElementException.

Из вашего примера, похоже, вы пытаетесь сделать первый проход по глубине. Итак, ваш код должен выглядеть примерно так:

private void handleRecursiveMethod(Sometype someMethod) { 
    Iterator<Sometype> methods=doingSomething(someMethod)); 
    while(methods.hasNext()){ 
      Sometype method = methods.next() 
      printingDetailsAboutThisMethod(method) 
      handleRecursiveMethod(method); 
    } 
} 
+0

+1 хотя ваш ответ лишь несколько полезен, хотя код исправлен правильно. Он вызывает только «NoSuchElementException», если есть нечетное число значений, которые повторяются. Конечно, для «printDetailsAboutThisMethod» заданы только нечетные элементы, и в рекурсивном вызове 'handleRecursiveMethod' используются только четные элементы, поэтому исправление кода верное, но описание немного выключено. – Andreas

+0

Это очень полезно. Но это то, что я тоже пытался. В этом случае, если условие истинно в первой итерации, тогда эта логика не будет искать другого связанного с ним объекта итератора. Я думаю, что эта логика будет работать, если объект имеет другой объект, а затем снова проходит, но не когда объект имеет много объектов, а затем проходит через каждый объект и т. Д. – marion

+0

Можете ли вы объяснить, что вы подразумеваете под другими объектами, связанными с ним? Роль итератора заключается в повторении всех объектов внутри коллекции. В этом случае в цикле while все элементы в коллекции someMethod пройдут, и для каждой из них будет вызываться рекурсивная функция. Таким образом, это должно охватывать все элементы дерева. Не могли бы вы объяснить свой вопрос дальше? –

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