Дан рекурсивный алгоритм: procedure f(n: integer); begin writeln('*'); if n > 0 then begin f(n-2); f(n div 2) end end; сколько символов "звездочка" будет напечатано на экране при выполнении вызова f(7)?
166
433
Ответы на вопрос:
Пусть k(n) - количество звездочек, напечатанных при вызове f(n) тогда k(n) = 1 { writeln('*') } + k(n-2) {вызов f(n-2) -> печатается еще k(n-2) звездочек} + k(n div 2) {f(n div 2)} при n > 0 и k(n) = 1 при n < = 0 требуется найти k(7) k(7) = 1 + k(5) + k(3) k(5) = 1 + k(3) + k(2) k(3) = 1 + k(1) + k(1) k(2) = 1 + k(0) + k(1) k(1) = 1 + k(-1) + k(0) k(0) = k(-1) = 1 {0, -1 < = 0} k(1) = 1 + 1 + 1 = 3 k(2) = 1 + 1 + 3 = 5 k(3) = 1 + 3 + 3 = 7 k(5) = 1 + 7 + 5 = 13 k(7) = 1 + 13 + 7 = 21 ответ: 21
Популярно: Информатика
-
mskobetsnata17.12.2020 16:30
-
FD14021.02.2020 12:32
-
КурогаБич20.06.2022 09:34
-
АртёмПлотников24.03.2022 00:19
-
гогогогог06.01.2020 02:01
-
Знайка5000000001.05.2022 14:40
-
aizhan7904.03.2021 20:08
-
Lisa03010516.08.2022 17:16
-
vladazimenko1528.01.2021 08:40
-
skachkov156208.02.2020 19:00