Печать серии на основе рекурсивной программы в Python - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать рекурсивную программу на Python для печати серии. Ниже приведен мой код:

def pattern(n,k):
    if n > 0:
        print(n, end = ',')
        print(pattern(n-k,k), end=',')
        print(n,end = ',')
    else:
        print(n,end = ',')

pattern(12,5)

Вывод должен быть в форме: 12,7,2,-3,2,7,12 т.е. начиная с n, а затем последовательно минус 5, пока не достигнет 0 или отрицательного числа, а затем суммирует 5, пока не достигнет 12

Но в качестве вывода я получаю следующее: 12,7,2,-3,None,2,None,7,None,12,

Почему я получаю None? Как я могу удалить его и распечатать согласно приведенному выше условию?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Привет. Проблема с вашим кодом в том, что вы пытаетесь напечатать шаблон функции, который по умолчанию не возвращает ни одного значения в Python, следовательно, вы должны сделать:

def pattern(n,k):
    if n > 0:
        print(n, end = ',')
        pattern(n-k,k) # just simply call the function and do not print it
        print(n,end = ',')
    else:
        print(n,end = ',')
0 голосов
/ 11 апреля 2020

Ваш рисунок - это уменьшение от внешних краев к середине. каждый шаг в рекурсии должен объединять меньшую подстроку со значением на каждой стороне (выводить только конечный результат в конце):

def pattern(n,k):
    if n <= 0: return str(n)
    return f"{n}, {pattern(n-k,k)}, {n}"

output:

print(pattern(16,5))

# 16, 11, 6, 1, -4, 1, 6, 11, 16

В идеале вы следует отделить вычисления от рендеринга, чтобы функция работала с числами, и вы можете отформатировать их как строку для печати в конце:

def pattern(n,k):
    return [n] if n<=0 else [n]+pattern(n-k,k)+[n]

print(pattern(n,k)) 
# [16, 11, 6, 1, -4, 1, 6, 11, 16]

# or

print(", ".join(map(str,pattern(16,5)))) 
# 16, 11, 6, 1, -4, 1, 6, 11, 16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...