Рейтинг:
2
Member 14926458
# Чтение входных данных
n = int(вход())
k = int(вход())
# Определите функцию
def pattern(n, m, k):
# Базовый вариант. Если m <= 0, выведите m и вернитесь из функции
если m <= 0:
print(m, end = ", ")
вернуть
# Print m, вызовите рекурсивную функцию с помощью (n, m-k, k), а затем снова выведите m
print(m, end = ", ")
паттерн(n, m-k, k)
# Этот условный оператор был использован для того, чтобы вы не печатали запятую
# после последнего элемента.
если(n != m):
print(m, end = ", ")
еще:
печать(м)
# Объявление другой переменной m равной n
m = n
# Вызов функции с 3 аргументами - n, m и k. Будет использована дополнительная буква М
# для рекурсивных вызовов. N будет сохранено, потому что если вы проверите выход
# format, вы увидите, что после последнего элемента вы не должны печатать запятую.
# Значение 'n' в функции будет использоваться в первую очередь для этого.
паттерн(n, m, k)
Рейтинг:
2
Member 14869258
Всем Привет,
После приведенной выше логики он прекрасно работает, но я вижу, что ни один из них не прилагается к нему. Как с этим справиться.
def pattern(n):
если n<=0: # тест должен включать 0
print(n, end= ")
еще:
print(n, end= ")
print(", ", end= ")
паттерн(n-k)
print(", ", end= ")
print(n, end= ")
Выход:
Выход решения
10, 8, 6, 4, 2, 0, 2, 4, 6, 8, 10None
Ожидаемый результат
10, 8, 6, 4, 2, 0, 2, 4, 6, 8, 10
0x01AA
Нейтральная 3, другие дадут легко 1 для этого. Вы не прочитали все комментарии?
CHill60
Или кто-то из нас сообщит об этом как о "не ответе" :-)
Рейтинг:
1
Patrice T
Свой подход:
def pattern(n):
if n<0: # test must include 0
return n # Where have you seen that pattern return something ?
print(n)
else:
print(n)
print(", ")
pattern(n-k)
print(", ")
print(n)
0x01AA
Я предполагаю, что вы проверили его, и он работает. Итак, а +5
Это действительно работает?
Вау да, только что протестировано онлайн :thumbsup:
Только одна небольшая поправка: if n<=0:
как вы упомянули об этом :-)
Patrice T
Спасибо.
На самом деле, я его не проверял :)
Сделал это, просто прочитав код .
0x01AA
Спасибо! И я до сих пор не могу понять, как это происходит с этим примером :blush:. Рекурсивные вещи никогда не были моим коньком, но из-за вашего решения я погружусь в него и попытаюсь понять этот пример :-)
Patrice T
Рекурсия нуждается в небольшом повороте мышления.
Самый простой способ-это, вероятно, атаковать проблему в обратном направлении.
Допустим,у вас есть паттерн(n, k)
pattern(0,2) is 0
pattern(2,2) is 2, 0, 2 => n+", "+pattern(n-k,k)+", "+n
pattern(4,2) is 4, 2, 0, 2, 4 => n+", "+pattern(n-k,k)+", "+n
pattern(6,2) is 6, 4, 2, 0, 2, 4, 6 => n+", "+pattern(n-k,k)+", "+n
Mary Louse
Привет, спасибо за код, но он нуждается в некоторых изменениях.. это не дает правильного результата для следующего:
входные данные : n=10, k=2
фактический выход: 10, 8, 6, 4, 2, 0, 2, 4, 6, 8, 10
Выход раствора : 10
,
8
,
6
,
4
,
2
,
0
,
-2
,
0
,
2
,
4
,
6
,
8
,
10
не могли бы вы помочь мне с ответом?
0x01AA
И вы обратили внимание на комментарий от Патрис здесьif n<0: # test must include 0
?
0x01AA
Даже если я не должен этого делать ... но поскольку я надеюсь, что вы примете этот превосходный ответ от Патрисета и оцените его пятью звездами, окончательный код таков (отступы, которые вы должны восстановить самостоятельно):
def pattern(n):
if n<=0:
print(n, end= '')
else:
print(n, end= '')
print(", ", end= '')
pattern(n-k)
print(", ", end= '')
print(n, end= '')
Patrice T
Спасибо за поддержку
Я исправил ваш комментарий для представления кода.
0x01AA
Мы всегда рады вам. Как вы это сделали с пробелами/отступами?
Просто отредактируйте его и посмотрите, как он работает. Спасибо ;)
Patrice T
Когда я делаю комментарии с кодом, я строю комментарий в пустом решении, а затем вырезаю/вставляю в комментарий.
0x01AA
Я такой дурак, то же самое я делаю со ссылками, но никогда не думал о том, что это работает и с кодом :-)
Рейтинг:
1
OriginalGriff
Прочитайте инструкцию еще раз и подумайте о том, что вы должны сделать.
Я бы написал две функции: одну, чтобы идти "вниз", и одну, чтобы идти "вверх". Затем позовите их обоих, одного за другим.
Передайте ему три значения: текущее значение, декремент и "разделитель". В этом случае возвращаемое значение не требуется (как и рекурсия, это гораздо проще, чем цикл).
Первый раз, когда вы позвоните, передать его н и пустую строку.
в функции выведите разделитель, а затем текущее значение.
Теперь уменьшите текущее значение и проверьте его. Если он меньше нуля, возвращайтесь.
В противном случае вызовите функцию снова с новым текущим значением, тем же декрементом и разделителем ", ".
Функция "вверх" такая же, но идет в другую сторону.
Попробуйте сначала сделать это на бумаге вручную, и вы поймете, что я имею в виду, а затем начните кодировать.