Recursão como substituição de loop
Vimos que a recursão é a execução repetida de instruções contidas em uma sub-rotina. E isso, por sua vez, é semelhante ao trabalho do ciclo. Existem linguagens de programação nas quais a construção do loop está totalmente ausente. Por exemplo, Prolog. 
Vamos tentar simular o funcionamento do loop 
for. 
O loop 
for  contém uma variável de contador de passos. Em uma sub-rotina recursiva, tal variável pode ser passada como um parâmetro.
# Procedimento LoopImitation() com dois parâmetros
# Primeiro parâmetro – contador de passos, segundo parâmetro – número total de passos
def LoopImitation(i, n):
    print("Hello N", i) # Instrução a ser repetida para qualquer valor de i
    se eu < n: # Até que o contador de loop seja igual ao valor n,
        LoopImitation(i + 1, n) # chama uma nova instância do procedimento,
                                # com o parâmetro i+1 (vá para o próximo valor i)