Хорошо, давай посмотрим на эту задачу. Нам нужно определить результат работы программы с рекурсивным алгоритмом. Вводят число 14, и мы должны понять, что вернёт функция W(n).
Рассмотрим код функции W(n):
- Если
n <= 3, функция возвращаетn. - Если
nделится на 2 без остатка, то естьn % 2 == 0, функция возвращаетW(n//2). - Во всех остальных случаях функция возвращает
W(n-1) + W(n-3).
Так как наш ввод это 14, это значит n не меньше или равно 3 и n делится на 2 нацело, поэтому мы используем блок elif.
Пошагово выполним рекурсивные вызовы:
W(14)делится на2, значит вызовемW(7).W(7)не делится на2и больше3, значит вызовемW(6)иW(4).W(6)делится на2, значит вызовемW(3), который вернет3, так какn <= 3.W(4)делится на2, значит вызовемW(2), который вернет2, так какn <= 3.- Теперь вернемся к
W(7)с результатамиW(6)иW(4), то есть7вернет3 + 2 = 5.
И так, результирующее значение программы для n=14 это 5.