Как я могу исправить этот массив? - PullRequest
0 голосов
/ 18 июня 2020
#!/bin/python3



b = []
def rotate(d,a):
    if d == 0:
        return a

    b = []

    for i in range(len(a)):
        b.insert(i-1,a[i])
    a = b

    rotate(d-1,b)

if __name__ == '__main__':

    d = 4

    a = ['1','2','3','4','5']
    print(rotate(d,a))

Не знаю почему, но когда я возвращаю «а», он ничего не печатает. Кто-нибудь может мне с этим помочь

1 Ответ

0 голосов
/ 18 июня 2020

ваша проблема заключается в отсутствии оператора return, когда rotate вызывается рекурсивно:

def rotate(d,a):
    if d == 0:
        return a
    #....
    rotate(d-1,b)  # <---- here

если вы вызываете rotate (d, a) с d> 0, вы вводите рекурсию rotate (d-1, b ) ... но вы отбрасываете результат, а python вместо этого возвращает None. это потому, что в python любой вызов метода, который явно не возвращает значение, всегда возвращает None ... и ваш первоначальный вызов rotate (d, a) с d> 0 никогда не передавался оператором return (только рекурсивный вызов с d = 0 работает, но вы отбрасываете этот результат) ... поэтому он возвращает None.

это должно решить вашу проблему:

def rotate(d,a):
    if d == 0:
        return a
    #....
    return rotate(d-1,b)  # propagate the calculated value back up

см. также: Почему моя рекурсивная функция возвращает None?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...