Джава-8
Привет. Напоминаю в рамках тега изучениеджава (хейтерам банить именно его) я вместе с вами изучаю основы джава. Сегодня узнаем о рекурсии. Но для начала решение задачи, обсуждаемой в постах 6 и 7.
В седьмом посте для вывода я выбрал метод использования оператора Switch. Это наихудший вариант имхо, свой поступок я объяснить не могу. о.О
Решение ввода только цифр (проверять объяснять я его конечно же не буду):
Как вы помните, программы состоят из методов. Эти методы могут иметь параметры (об этом уже говорилось). А также могут возвращать какое-либо значение (либо не возвращать – ключевое слово void). Для того чтобы функция могла возвращать какое-либо значение необходимо выполнение трёх условий:
Первое условие: должен быть указан тип, который возвращает метод (на изображении ниже указан тип int).
Второе условие: в любом случае метод должен вернуть значение (выполняется при помощи слова return), в противном случае при компиляции возникнет ошибка.
Третье условие: возвращаемое значение должно иметь тип, который совпадает или можно привести к типу метода.
Рекурсией же называют вызов методом самого себя:
Как же работает рекурсия?
Мы вызываем метод fact с параметром a == 9. Метод проверяет не равняется ли а одному. Так как 9 не равно 1, возвращается значение:
девять умножить на значение, которое вернёт метод fact с параметром 9 – 1 (то есть 8).
и тут создаётся «копия» метода, которая вычисляет факториал восьми, после чего она вернёт факториал восьмёрки и этот факториал будет умножен на 9 «первой копией» метода.
и так далее «копии» методов вычисляют факториал пока, параметр а не будет равен единице, где функция возвращает определённое значение – один. И по вызовам мы возвращаемся назад.
Представьте, что у нас есть конструктор лего и дверь с ключом в замочной скважине. Мы поворачиваем ключ 9 раз, открываем дверь и видим за ней комнату с последним пунктом инструкции по сборке нашего лего в стеклянном ящике. Ящик прикован к полу, но нам прекрасно видно, что нарисовано в этом пункте. Также в комнате дверь с ключом, абсолютно напоминающая первую, только ключ в ней нужно повернуть 8 раз (это на стене написано, кровью….
Мы открываем вторую дверь восемью оборотами ключа: предпоследний пункт в таком же ящике, такая же дверь. Повернуть семь раз – написано калом.
….
Ещё шесть дверей спустя мы, наконец, находим первый пункт инструкции и начинаем сборку лего, возвращаясь назад по комнатам. Как только мы возвращаемся в третью комнату, вторая уничтожается, и т.д.
Примерно так и работает рекурсия.
Но зачем использовать рекурсию, если можно использовать цикл подобный следующему?
Да хуй его знает.
Попробуйте решить следующую задачу при помощи рекурсии:
По статистике наркоман каждый год затягивает в свои ряды пять новых человек. В среднем в тюрьмах сидит только каждый десятый наркоман. Сколько нужно заказать стульев с пиками точёнными, а сколько с хуями дрочёнными, через 5 лет учитывая следующие данные:
* сейчас в тюрьмах сидят 3000 наркоманов;
* на каждого посаженного наркомана, в год нужно по 1 стулу каждого типа.
Хорошо написал)
Мне достаточно того что я увидел в примерах на оф сайте. Да и переход на тайпскипт - идиотизм. Куча каких-то блять конфиг файлов, миллион классов, короче если джава это интерпретатор иксемеля в стектрейсы, то ангуляр2 это интерпритатор джсона в ошибки браузера.