Come ulteriore riscontro al test fatto da Leo ecco un semplicissimo sketch che dimostra al di la di ogni dubbio che avr-gcc consente la ricorsività delle funzioni ed è abbastanza intelligente da non riempire lo stack.
Lo sketch conta da 0 a 10001 usando una funzione ricorsiva, l'uscita è determinata da una if e una return, i valori vengono inviati al monitor seriale e alla fine delle iterazioni viene ceduto il controllo al main loop che fa lampeggiare un led a dimostrazione che non c'è stato nessun stack overflow.
long iter = 0;
void setup()
{
Serial.begin(115200);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
recurse();
Serial.println("fine iterazioni");
}
void loop()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
void recurse(void)
{
iter++;
Serial.println(iter,DEC);
if (iter > 10000)
{
iter = 0;
return;
}
recurse();
}