Вы получаете бесконечную рекурсию, потому что неправильно тестируете свое условие выхода. Кроме того, мне кажется, что функция должна добавлять в список, если получает от себя, а не обновлять ее путем передачи параметров.
Но вам действительно нужно использовать рекурсию для этого? Кажется, что результат можно получить напрямую, используя два диапазона:
def myFunc(n,k):
return [*range(n,-k,-k),*range(n%k,n+1,k)]
output:
myFunc(16,5) # [16, 11, 6, 1, -4, 1, 6, 11, 16]
Если вам нужно, чтобы он был рекурсивным, вы должны найти рекурсивный шаблон в результат. Например, движение с обеих сторон к середине уменьшается на k, пока не будет достигнуто отрицательное значение:
def myFunc(n,k):
if n<=0: return [n]
return [n]+myFunc(n-k,k)+[n]