Spinacz biurowy, Saper/nolin11 <nolin11_USUNT snipped-for-privacy@interia.pl!
Chyba nie zrozumiałeś :)
Wywołanie funkcji odkłada na stos adres powrotu. Jeżeli funkcja nigdy się nie kończy i rekurencyjnie się wywołuje (tak jak u ciebie), to stos się prędzej czy później przepełni i zacznie mazać po pamięci, którą sobie zaalokowałeś (AVRy nie mają sprzętowej ochrony pamięci) i mogą być niezłe jaja (na początku nowe próby alokacji pamięci przestaną się udawać, bo libc będzie próbowała uratować co się da, a potem już zaalokowana pamięć zostanie zamazana).
Więc teraz działa, ale po jakimś czasie (odpowiedniej liczbie wywołań main()) przestanie.