Для решения задачи нужно понять, что функция F(n) выполняет два действия: напечатать звездочку без переноса строки и, если n > 0, вызвать сама себя с параметром n-1. Также при n <= 0 функция напечатает дополнительную звездочку. Таким образом, мы получаем одну звездочку при каждом вызове функции F(n) еще до проверки условия, и если n <= 0, то еще одну дополнительно.
Мы хотим, чтобы программа напечатала ровно шесть звездочек. Учитывая дополнительную печать звездочки при n <= 0, нам нужно, чтобы саморекурсивные вызовы функции F(n) составили в сумме пять вызовов (для пяти звездочек), а шестая появится за счет n <= 0.
Мы можем начать с n = 4. В этом случае функция F(n) напечатает:
- Звездочку для
F(4) - Звездочку для
F(3)(рекурсивный вызов сn - 1) - Звездочку для
F(2)(рекурсивный вызов сn - 1) - Звездочку для
F(1)(рекурсивный вызов сn - 1) - Звездочку для
F(0)(рекурсивный вызов сn - 1)
И когда n достигнет 0, функция добавит шестую звездочку из блока if n <= 0.
Итак, чтобы напечатать шесть звездочек, x должно быть равно 4.
Однако, надо заметить, что после выполнения функции F(x) в коде есть вызов print, который попытается напечатать возвращаемое значение функции F(x). Но поскольку функция F не возвращает явно никакого значения, по умолчанию она вернет None, что приведет к тому, что print(F(x)) напечатает None после звездочек.
Чтобы исправить это и напечатать только звездочки, можно либо изменить функцию F, чтобы она возвращала '' (пустую строку):
def F(n):
print('*', end=' ')
if n <= 0:
print('*', end=' ')
if n > 0:
F(n - 1)
return ''
x = 4
print(F(x), end='') # Добавлено end='', чтобы избежать вывода лишнего перевода строки
Либо можно не использовать print для вызова функции:
def F(n):
print('*', end=' ')
if n <= 0:
print('*', end=' ')
if n > 0:
F(n - 1)
x = 4
F(x)
Оба этих подхода обеспечат печать только шести звездочек *.
