A estrutura de dados usada implicitamente para suportar a recursão é a pilha de chamadas .
Enquanto você não é explicitamente * usar * uma estrutura de dados da pilha em seu código ao escrever uma função recursiva, o mecanismo subjacente depende muito nela. Cada chamada recursiva adiciona um novo quadro (contendo variáveis locais, parâmetros de função e endereço de retorno) à pilha de chamadas. Quando uma chamada recursiva é concluída, seu quadro é retirado da pilha e a execução é retomada no ponto em que a chamada foi feita. Se a recursão não for encerrada corretamente, ela poderá levar a um erro de estouro de pilha, porque a pilha tem um tamanho limitado.