Решение: Рекурсивный подсчёт звёздочек
Ниже на пяти языках программирования записаны две рекурсивные функции (процедуры) $F$ и $G$. Функция $F(n)$ вызывает $G(n-1)$, если $n>0$. Функция $G(n)$ печатает символ «*», а затем вызывает $F(n-2)$, если $n>1$. Сколько символов «*» будет напечатано на экране при выполнении вызова $F(13)$?
Решение по шагам
3 шагаПри вызове $F(n)$, если $n>0$, выполняется вызов $G(n-1)$. Функция $G$ печатает одну звёздочку и при аргументе больше 1 вызывает $F(n-3)$ относительно исходного аргумента $F$.
$$F(n)\to G(n-1)\to F(n-3)$$Последовательность вызовов функций $F$ имеет вид:
$$F(13)\to F(10)\to F(7)\to F(4)\to F(1)$$Каждый из этих пяти вызовов $F$ вызывает функцию $G$, которая печатает одну звёздочку. После вызова $G(0)$ дальнейший вызов $F$ не выполняется.
$$1+1+1+1+1=5$$Где здесь ошибаются
Учитывают только вызовы $G$ с аргументом больше 1 и не считают вызов $G(0)$.
Уменьшают аргумент следующего вызова $F$ на 2 вместо 3.