У меня есть два списка, которые представляют длинные числа, и мне нужно найти рекурсивный способ ответить, какое число больше

#java #list

#java #Список

Вопрос:

У меня есть два списка, каждый из которых представляет число из типа long . Каждое число сохраняется в обратном порядке в каждом списке. значение: (123 сохраняется 321), и я пытаюсь найти способ найти, в каком списке наибольшее число, пройдя только один раз по каждому списку. Мне нужно сделать это рекурсивно, и я предпочитаю абстрактную идею вместо прямого ответа.

Комментарии:

1. Ваш вопрос настолько запутанный. Попробуйте это исправить. Что именно означает «список представляет длинное число»? Разве вы не имели в виду список чисел (длинный)? «Число сохраняется в обратном порядке в каждом списке» — означает, что вы вставляете число в конец списка? «Какое число больше …» означает, какой список имеет большее максимальное число?

2. да, сэр, и я отредактировал свой вопрос.

3. @yardentamam Я думаю, вы хотели сказать, что 123 это сохраняется как [3, 2, 1] , верно? A List цифр в обратном порядке.

Ответ №1:

Вы реализуете метод с этой подписью:

 int compare(List<Integer> num1, List<Integer> num2, int index)
 

где num1 и num2 — ваши два списка цифр в обратном порядке, и index является индексом в списках для сравнения.

Вы выполняете рекурсию до index тех пор, пока не достигнете конца самого длинного списка, затем сравниваете и возвращаете значение, как это делают другие методы сравнения (<0, >0, ==0). Если списки имеют разную длину и index находятся за пределами конца одного из списков, используйте 0 значение для пропущенной цифры этого списка.

При возврате рекурсивный вызывающий будет проверять значение и сравнивать цифры, если возвращаемое значение равно 0 , в противном случае просто верните возвращаемое значение без изменений.

Комментарии:

1. я не совсем понял это. как я могу использовать индекс и для чего именно. Я пытаюсь выяснить, как остановиться, если самая большая цифра больше, чем другая, и если нет, продолжать сравнивать. спасибо за помощь.

2. @lanz Прочитайте последний абзац. Если возвращаемое значение не 0 равно, верните его без изменений, т. Е. Прекратите сравнение. — Как бы вы отслеживали, где находятся в рекурсии, если не используете индекс? subList() ? Слишком ресурсоемкий, когда подойдет простой индекс.

3. Я не могу понять, как я могу прекратить сравнивать?

4. @lanz Я уже объяснял, но, возможно, это будет сделано в третий раз: когда рекурсивный вызов возвращает ненулевое значение, верните его немедленно, т. Е. Не сравнивайте предыдущие цифры, т.Е. Прекратите сравнение после обнаружения разницы.