ваша проблема заключается в отсутствии оператора 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?