Вопрос задан 28.06.2026 в 17:57. Предмет Информатика. Спрашивает Иргит Уран-Сай.

// Дан лимит = 1000, напишите функцию, которая будет выводить в консоль удвоенное значение аргумента до тех пор, пока оно не достигнет лимита, и после этого вывести в консоль аргументы в обратном порядке
// Например:
// Ввод: functionLimit(50)
// Вывод:
// 50
// 100
// 200
// 400
// 800
// 800
// 400
// 200
// 100
// 50

Перейти к ответам

Ответы на вопрос

Отвечает Швеченкова Кристина.

Можно решить задачу рекурсией. Сначала выводим текущее значение, потом, если удвоенное значение не превышает лимит, вызываем функцию ещё раз с удвоенным аргументом. После возврата из рекурсии выводим текущее значение ещё раз — поэтому значения печатаются в обратном порядке.

JavaScript
const limit = 1000;

function functionLimit(num) {
console.log(num);

if (num * 2 <= limit) {
functionLimit(num * 2);
}

console.log(num);
}

functionLimit(50);

Результат будет:

JavaScript
50
100
200
400
800
800
400
200
100
50

Как это работает:

JavaScript
functionLimit(50)

Сначала функция выводит:

JavaScript
50

Потом проверяет:

JavaScript
50 * 2 <= 1000

Это правда, поэтому вызывается:

JavaScript
functionLimit(100)

Дальше аналогично:

JavaScript
100
200
400
800

Когда функция доходит до 800, проверка выглядит так:

JavaScript
800 * 2 <= 1000

То есть:

JavaScript
1600 <= 1000

Это уже ложь, поэтому дальше рекурсивный вызов не происходит.

После этого начинают завершаться предыдущие вызовы функции, и каждая из них выполняет второй console.log(num). Поэтому значения выводятся обратно:

JavaScript
800
400
200
100
50

Полный порядок получается такой:

JavaScript
50
100
200
400
800
800
400
200
100
50

Можно также написать вариант с массивом, если нужно явно сохранить значения, а потом вывести их в обратном порядке:

JavaScript
const 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);

Но для такой задачи рекурсивный вариант короче и лучше подходит по смыслу.

Отвечает Зайцева Надя.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос