%d ist ein Platzhalter für einen Double-Wert.
PINB ist wohl irgendeine Registeroperation, bei der irgendein Byte rumgeschoben wird

Das ganze wird hinter # eingebunden, weil das in C so ist.

Die wichtigsten Dinge, die hinter einer # sind:
#include <package.h>
und
#define konstante wert

Ein Register ist ein Speicher für eine Zahl in deiner Hardware.

Zu deiner Frage mit der Rekursion: probier's aus. Normalerweise sollte es funktionieren. Ich weiss auch nicht ob der Compiler automatisch rekursionen auflöst...Aber ich denke, es geht. Probiers.

Ich komme auch aus der Java-Welt und tue mir mit C etwas schwer. Such dir doch ne Java VM für deinen µC...