Задача Задача №3542494
А
А
Задача сводится к подсчету числа выводов символа '*' при вызове F(n).
- Анализ кода
- Пусть T(n) — сколько символов '*' напечатает вызов F(n).
- Всегда выполняется первый print('*'), поэтому для любого n T(n) по крайней мере 1.
- Затем если n >= 1 выполняются еще: print(''), рекурсивные вызовы F(n-1) и F(n-3), и в конце ещё print('').
- Значит для n >= 1 общее число печатей равно T(n) = 1 (перед рекурсией) + T(n-1) + T(n-3) + 1 (после рекурсий) + 1 (первый внеусловный вывод) = 3 + T(n-1) + T(n-3).
- Для n <= 0 условие if нe выполняется, поэтому печатает только первый print, следовательно T(n) = 1.
Итоговая рекуррентная формула:
- T(n) = 1 при n <= 0
- T(n) = 3 + T(n-1) + T(n-3) при n >= 1
- Вычисление значений (первичные шаги)
- T(0) = 1
- T(-1) = 1
- T(-2) = 1
- T(1) = 3 + T(0) + T(-2) = 3 + 1 + 1 = 5
- T(2) = 3 + T(1) + T(-1) = 3 + 5 + 1 = 9
- T(3) = 3 + T(2) + T(0) = 3 + 9 + 1 = 13
- T(4) = 3 + T(3) + T(1) = 3 + 13 + 5 = 21
- T(5) = 3 + T(4) + T(2) = 3 + 21 + 9 = 33
- T(6) = 3 + T(5) + T(3) = 3 + 33 + 13 = 49
- T(7) = 3 + T(6) + T(4) = 3 + 49 + 21 = 73
- T(8) = 3 + T(7) + T(5) = 3 + 73 + 33 = 109
- T(9) = 3 + T(8) + T(6) = 3 + 109 + 49 = 161
- T(10) = 3 + T(9) + T(7) = 3 + 161 + 73 = 237 (Дальше по той же рекуррентной схеме можно продолжать до нужного n.)
- Результат для F(40) По расчёту по той же схеме до n = 40 получаем: T(40) = 22 947 841
Ответ одинаков для всех трёх языков (Python, Pascal, C++, т.к. речь идёт о количестве вызовов печати, а не о синтаксисе языка).
Итого:
- Python: 22 947 841 выводов символа '*'
- Pascal: 22 947 841
- C++: 22 947 841
Если хотите, могу показать полный табличный ход вычислений до 40 или привести небольшой скрипт, который посчитает это автоматически.