#java #рекурсия
Есть задача, написать рекурсивную процедуру для вывода на экран цифр натурального числа в обратном порядке. Я её решил, но хочу что бы на выходе из рекурсии получалось целое число. Вот, что я сейчас имею. public class MyClass { public static int consoleInputFirstNumber() { Scanner scan = new Scanner(System. in ); System.out.print("Enter number: "); if (scan.hasNextInt()) { return scan.nextInt(); } else { System.out.println("Entered not number. Try again."); return consoleInputFirstNumber(); } } public static void numberReverseOrder(int number) { if (number == 0) { return; } else { System.out.print(number % 10); numberReverseOrder(number / 10); } } public static void consoleOutput(int result) { System.out.println(result); } public static void main(String[] args) { int input = consoleInputFirstNumber(); numberReverseOrder(input); } } Кто знает, что нужно что бы решить мою проблему дайте подсказку или напишите решение. Заранее спасибо.
Ответы
Ответ 1
Вообще-то ваша программа вроде как работает. Она только для 0 ничего не выводит, поэтому непонятно, чего вы хотите. Но вот для разнообразия моё решение. Проще такую задачу решать, преобразовав число в строку и сведя её к выводу перевёрнутой строки. Кроме того я бы разделил преобразование строки к перевёрнутой и собственно вывод. Вот как вашу задачу можно решить рекурсивно: import java.util.Scanner; public class RecursiveReverse { public static String reverse(String str) { return str.isEmpty() ? "" : reverse(str.substring(1)) + str.charAt(0); } public static void main(String[] args) { try (Scanner scan = new Scanner(System.in)) { System.out.print("Enter number: "); System.out.println("Reversed: " + reverse(String.valueOf(scan.nextInt()))); } } }Ответ 2
Вот мой простой ответ: static int reverse(int num){ return num<10 ?num:Integer.parseInt(String.valueOf(num%10)+reverse(num/10)); }Ответ 3
Вариант без использования строки. Класс IntRef нужен для имитации передачи параметра по ссылке. public class RecursiveReverse { private static class IntRef { int value; public IntRef( int value ) { this.value = value; } } public static int reverse( int arg ) { IntRef result = new IntRef( 0 ); reverseRec( arg, 1, new IntRef( 0 ), result); return result.value; } private static void reverseRec( int arg, int curDepth, IntRef maxDepth, IntRef result ) { if ( arg < 10 ) { maxDepth.value = curDepth; result.value = arg; } else { reverseRec( arg/10, curDepth * 10, maxDepth, result ); result.value = result.value + (arg % 10) * maxDepth.value / curDepth; } } public static void main( String[] args ) { int[] tests = new int[] { 0, 1, 5, 10, 11, 15, 100, 123, 555, 375, 1000, 1040, 12345 }; for ( int test : tests ) { System.out.printf( "%6d | %d%n", test, reverse( test ) ); } } }
Комментариев нет:
Отправить комментарий