Вопрос задан 08.01.2024 в 23:32. Предмет Информатика. Спрашивает Вишневская Анастасия.

Ограничение времени: 1c Ограничение памяти: 64mb
Ввод: finance.in
Вывод: finance.out
В этом году выпускники одиннадцатых классов будут сдавать ЕГЭ по информатике на компьютерах. Одна из задач предполагает умение анализировать работу рекурсивного алгоритма. Мы предлагаем Вам ’олимпиадную’ версию такой задачи.
Исходный текст программы, используемой в задаче, размещен на сайте подготовки к ЕГЭ ’kpolyakov.spb.ru’

Рассмотрим функцию, приведенную ниже на трех языках программирования.
Python
def F( n ):
print(n+1)
if n > 1:
print(2*n)
F(n-1)
F(n-3)

Pascal
procedure F( n: integer );
begin
writeln(n+1);
if n > 1 then begin
writeln(2*n);
F(n-1);
F(n-3);
end;
end;

C++
void F( int n )
{
cout 1 ) {
cout << 2*n << endl;
F(n-1);
F(n-3);
}
}

Напишите программу, которая определяет, сколько двоек выводится на экран в результате вызова функции F(z). Ваша программа должна учитывать все цифры ’2’, выводимые программой, даже если она в составе числа.
Формат ввода
В единственной строке входного файла recursion.in записано число z. (1≤ z ≤50)
Формат вывода
В файл recursion.out следует вывести единственное число - ответ к задаче.

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

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

Отвечает Латышев Валентин.

Эта задача - классический пример анализа работы рекурсивной функции. Рассмотрим функцию F на примере Python, так как она является одной из самых понятных:

python
def F(n): print(n+1) if n > 1: print(2*n) F(n-1) F(n-3)

Задача заключается в подсчете количества двоек, выводимых на экран при вызове F(z). Нужно учитывать каждую двойку, даже если она является частью другого числа.

Для решения задачи нам нужно понять, как работает рекурсивная функция F. Она выводит два числа каждый раз, когда вызывается (за исключением случаев, когда n <= 1). Первое число - это n+1, а второе - 2*n, если n > 1. После этого функция вызывает сама себя дважды: сначала с параметром n-1, а затем с n-3.

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

Давайте напишем программу на Python для решения этой задачи.

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

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

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

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