Вам не нужна вторая функция или какие-либо внешние переменные. Вам просто нужно граничное условие, чтобы знать, когда остановиться, а затем рекурсия, которая что-то делает. Здесь что-то может создавать часть вашего списка и рекурсивно обрабатывать остальное.
Часто бывает полезно сначала подумать о граничном случае, а затем подумать о том, что происходит с одним рекурсивным вызовом.
Вам также нужно не забыть вернуться из вашей функции (и подумать о том, что должно возвращать краевое условие (например, пустой список):
def create_list_recurse(start, end):
if start > end:
return []
return [start] + create_list_recurse(start + 1, end)
create_list_recurse(0, 9)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
create_list_recurse(3, 1) #edge case returns empty
# []