Datastrukturen som implicit används för att stödja rekursion är
samtalstacken .
Även om du inte uttryckligen * använder * en stack datastruktur i din kod när du skriver en rekursiv funktion, förlitar sig den underliggande mekanismen starkt på den. Varje rekursivt samtal lägger till en ny ram (som innehåller lokala variabler, funktionsparametrar och returadress) till samtalstacken. När ett rekursivt samtal slutförs sprids ramen från bunten, och körningen återupptas vid den punkt där samtalet gjordes. Om rekursionen inte avslutas ordentligt kan det leda till ett stacköverflödesfel eftersom stacken har en begränsad storlek.