Вот общая схема для выполнения простых рекурсивных вещей в python:
BASE_CASE = 1 #TODO
def f(current_case):
if current_case == BASE_CASE:
return #TODO: program logic here
new_case = current_case - 2 #TODO: program logic here ("decrement" the current_case somehow)
#TODO: even more program logic here
return f(new_case) + 1 #TODO: program logic here
Конечно, это не обрабатывает все возможные рекурсивные программы. Впрочем, это подходит как вашему делу, так и многим другим. Вы бы позвонили f(100)
, 100
было бы current_value
, вы проверяете, достигли ли вы еще дна, и если да, верните соответствующее значение в стек вызовов. Если нет, вы создаете новый случай, который, в вашем случае, является логикой «декремента», обычно обрабатываемой конструкцией «цикла». Затем вы делаете что-то для текущего случая, а затем снова вызываете функцию для нового случая. Этот повторный вызов функции делает ее «рекурсивной». Если у вас нет «if then» в начале функции для обработки базового случая, и где-то в функции вызывается функция с «меньшим» значением, вы, вероятно, столкнетесь с плохой рекурсией .