Тема 16. Рекурсивные алгоритмы

16.01 Одна функция

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела рекурсивные алгоритмы
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#5975

Ниже на трех языках программирования записана рекурсивная функция (процедура) F  .

|------------------------|-----------------|------------------|
|Pascal                  |Python           |C                 |
|procedure-F(n:-integer);|def-F(n):--------|void-F(int-n){----|
|                        |                 |                  |
|begin                    |  if n > 2:      |  if (n > 2){     |
|  if n > 2 then          |     print("∗ " ,)|    printf("∗" ,); |
|  begin                 |     F(n − 1 )   |    F (n − 1);    |
|    writeln("∗" ,);     |     F(n ∕∕2)    |    F (n∕2 );     |
|    F (n − 1);          |                 |  }               |
|                        |                 |                  |
|    F (n div 2 );        |                 |}                 |
|  end;                  |                 |                  |
-end.----------------------------------------------------------
Сколько символов «∗ » будет напечатано на экране при выполнении вызова F(7)  ?
Показать ответ и решение

Решение руками:

Данная рекурсивная функция останавливается, если n  принимает значение 2 или меньше. Следовательно, начнем выполнение функции, когда n = 3  . С помощью стрелочки → обозначим печать символа на экране.

При запуске F (3)  на экране появляется один символ «∗ ». Далее никакие функции не вызываются. F (3) → ∗ .

При запуске F (4)  на экране появляется один символ «∗ ». Далее вызываются функции F (4 − 1 = 3)  и F (4∕2 = 2)  . Так как n > 2  , то смотрим на F(3)  и добавляем количество символов от данной функции к количеству символов от F (4)  .

F(3) →  ∗

F(4) →  ∗∗ .

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

F(3) →  ∗ ;

F(4) →  ∗∗ ;

F(5) →  ∗ ∗ ∗ . Т.к. 5 >  2  печатется один символ «∗ » , а также вызывались функции F (4)  и F (2)  . Так как n > 2  , то взяли кол-во символов только от F (4)  .

F(6) →  ∗ ∗ ∗ ∗ ∗ . Т.к. 6 > 2  печатется один символ «∗ » , а также вызывались функции F(5)  и F (3  ). Того 5 символов.

F(7) →  ∗ ∗ ∗ ∗ ∗ ∗ ∗ . Т.к. 7 > 2  печатется один символ «∗ » , а также вызывались функции  F(6)  и F (3)  . Того 7 символов.

 

Решение программой:

def f(n):
    if n > 2:
        print("*")
        f(n - 1)
        f(n // 2)

print(f(7))

Осталось посчитать, сколько таких символов "*"вывела программа.

Получаем ответ: 7.

Ответ: 7

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!