#python #recursion
#python #рекурсия
Вопрос:
Мне действительно нужно создать две рекурсивные функции в Python. первая функция должна создать пирамиду с заданным параметром n
. например pyramid(3)
, должен иметь следующий вывод
*
***
*****
Я придумал следующую функцию:
def pyramid(n, i=0):
if n == 0:
return 0
else:
print(" "*(n-1) "*"*(2*i 1) " "*(n-1))
return pyramid(n-1, i 1)
Теперь мне нужно создать вторую рекурсивную функцию pyramid_seq
с 2 параметрами n,k
, которая выводит последовательность пирамид высотой n
. например pyramid_seq(3,4)
, должен иметь следующий вывод:
* * * *
*** *** *** ***
********************
Ответ №1:
Добавьте в свою функцию еще один параметр (обратите внимание на изменения в рекурсивном вызове), который определяет, сколько раз вы должны печатать каждую строку. Это создаст желаемый эффект.
def pyramid(n, k, i=0):
if n == 0:
return 0
else:
print(k*(" "*(n-1) "*"*(2*i 1) " "*(n-1)))
return pyramid(n-1, k, i 1)
Вывод для pyramid(4, 6)
:
* * * * * *
*** *** *** *** *** ***
***** ***** ***** ***** ***** *****
******************************************
Комментарии:
1. Мне было интересно, как мы могли бы добиться одинаковой последовательности пирамид с разной высотой?
2. @alamshahbaz16497 вы имеете в виду пирамиду с (например) 5 уровнями? Если это то, что вы имели в виду, то все, что вам нужно сделать, это изменить параметр ‘n’, который определяет, сколько уровней будет иметь каждая пирамида. Если вы имели в виду что-то другое, пожалуйста, уточните, потому что я вас не понял
3. Нет, я имел в виду, как мы печатаем пирамиды с разной высотой в последовательности. Пример: пирамида (2, 3, 5, 8) таким образом, первая пирамида будет иметь высоту 2, тогда вторая будет иметь высоту 3 и так далее.
4. @alamshahbaz16497 Я думаю, что рекурсивное решение не является подходящим решением вашей проблемы, но, конечно, оно может быть принудительным
Ответ №2:
Если вы хотите должным образом использовать возможности рекурсии, ваша функция должна возвращать их результат в виде данных, а печатная часть должна быть отдельной. Это позволит вам повторно использовать ранее определенную функцию для получения из нее новых результатов:
def pyramid(h):
if h==1: return ["*"]
return [" " p " " for p in pyramid(h-1)] ["*"*(2*h-1)]
Функция возвращает массив строк (strings), которые вы можете распечатать или использовать повторно для чего-то другого:
print(*pyramid(5),sep="n")
*
***
*****
*******
*********
Поскольку теперь у вас есть функция, которая генерирует пирамиду в виде списка строк, вы можете повторно использовать ее, чтобы объединить ее результат, чтобы сформировать серию пирамид, не изобретая велосипед:
def pyramids(h,w):
return [p*w for p in pyramid(h)]
print(*pyramids(4,6),sep="n")
* * * * * *
*** *** *** *** *** ***
***** ***** ***** ***** ***** *****
******************************************
Если ваша вторая функция также должна быть рекурсивной, вы все равно можете повторно использовать первую для ее создания:
def pyramids(h,w):
if w == 1: return pyramid(h)
return [ ps p for ps,p in zip(pyramids(h,w-1),pyramid(h)) ]