A ideia que está na base destas funções é que elas vão ter um parâmetro extra (o acumulador) onde a resposta vai sendo construída e gravada à medida que a recursão progride.

O acumulador vai sendo atualizado e passada como parâmetro nas sucessivas chamadas da função.

Uma vez que o acumulador vai guardando a resposta da função, o seu tipo deve ser igual ao tipo do resultado da função.

Podemos sistematizar as seguintes regras para definir funções usando esta técnica :

  1. Colocar o acumulador como um parâmetro extra.
  2. O acumulador deve ser do mesmo tipo que o do resultado da função.
  3. Devolver o acumulador no acaso de paragem da função.
  4. Atualizar o acumulador na chamada recursiva da função.
  5. A função principal (sem acumulador) chama a função com o parâmetro de acumulação, inicializando o acumulador.