// Дан лимит = 1000, напишите функцию, которая будет выводить в консоль удвоенное значение аргумента до тех пор, пока оно не достигнет лимита, и после этого вывести в консоль аргументы в обратном порядке
// Например:
// Ввод: functionLimit(50)
// Вывод:
// 50
// 100
// 200
// 400
// 800
// 800
// 400
// 200
// 100
// 50
Ответы на вопрос
Можно решить задачу рекурсией. Сначала выводим текущее значение, потом, если удвоенное значение не превышает лимит, вызываем функцию ещё раз с удвоенным аргументом. После возврата из рекурсии выводим текущее значение ещё раз — поэтому значения печатаются в обратном порядке.
JavaScriptconst limit = 1000;
function functionLimit(num) {
console.log(num);
if (num * 2 <= limit) {
functionLimit(num * 2);
}
console.log(num);
}
functionLimit(50);
Результат будет:
JavaScript50
100
200
400
800
800
400
200
100
50
Как это работает:
JavaScriptfunctionLimit(50)
Сначала функция выводит:
JavaScript50
Потом проверяет:
JavaScript50 * 2 <= 1000
Это правда, поэтому вызывается:
JavaScriptfunctionLimit(100)
Дальше аналогично:
JavaScript100
200
400
800
Когда функция доходит до 800, проверка выглядит так:
JavaScript800 * 2 <= 1000
То есть:
JavaScript1600 <= 1000
Это уже ложь, поэтому дальше рекурсивный вызов не происходит.
После этого начинают завершаться предыдущие вызовы функции, и каждая из них выполняет второй console.log(num). Поэтому значения выводятся обратно:
JavaScript800
400
200
100
50
Полный порядок получается такой:
JavaScript50
100
200
400
800
800
400
200
100
50
Можно также написать вариант с массивом, если нужно явно сохранить значения, а потом вывести их в обратном порядке:
JavaScriptconst limit = 1000;
function functionLimit(num) {
const values = [];
while (num <= limit) {
console.log(num);
values.push(num);
if (num * 2 > limit) {
break;
}
num *= 2;
}
for (let i = values.length - 1; i >= 0; i--) {
console.log(values[i]);
}
}
functionLimit(50);
Но для такой задачи рекурсивный вариант короче и лучше подходит по смыслу.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

