Вопрос:

1. Определите, сколько символов выведет эта процедура при вызове F(28):

Смотреть решения всех заданий с листа

Ответ:

Краткое пояснение: Необходимо проанализировать код на предмет вывода символа '*' при каждом вызове функции F(n) и учесть рекурсивные вызовы.

Разбираемся:

  • Функция F(n) выводит символ '*' при каждом вызове.
  • Также, если n >= 1, функция вызывает себя дважды: F(n-1) и F(n-2).

Давайте посчитаем количество символов '*' при вызове F(28):

Пусть count(n) - количество символов, выведенных при вызове F(n). Тогда:

  • count(n) = 1 + count(n-1) + count(n-2), если n >= 1
  • count(n) = 1, если n < 1

Рассчитаем значения для небольших n:

  • count(0) = 1
  • count(1) = 1 + count(0) + count(-1) = 1 + 1 + 1 = 3
  • count(2) = 1 + count(1) + count(0) = 1 + 3 + 1 = 5
  • count(3) = 1 + count(2) + count(1) = 1 + 5 + 3 = 9

Заметим, что count(n) = fibonacci(n+2), где fibonacci(n) - n-ое число Фибоначчи, умноженное на 1.

Таким образом, количество символов '*' при вызове F(28) будет равно fibonacci(30).

Числа Фибоначчи можно считать итеративно или использовать формулу Бинэ, но для нашей задачи проще реализовать итеративный подсчет.

Показать пошаговые вычисления

Реализуем итеративный подсчет:


a = 1
b = 1
for i in range(2, 30):
    c = a + b
    a = b
    b = c
print(b)

Получаем, что fibonacci(30) = 1346269

Ответ: 1346269

ГДЗ по фото 📸

Похожие