Inhaltsverzeichnis

Rekursion

Eine Funktion, die sich selbst aufruft, ist eine Rekursion. Dabei muß man beachten, dass die Funktion sich nicht endlos weiter selbst aufruft, sondern dass es eine Abbruchbedingung gibt, die nach ein paar Rekursionsstufen erfüllt wird. Damit kann man z.b. Schleifen nachahmen:

func int Npc_GetTalentSkillSum( var C_Npc npc )
{
    // Lokale Variablen behalten in Daedalus ihren Wert
    // ( vergleichbar mit 'static' Variablen in C/C++ )
    var int tal;
    var int sum;

    // Start - Summe initialisieren
    if ( 0 == tal )
    {
        sum = 0;
    };

    // Berechnung - Talentstufe addieren
    sum += Npc_GetTalentSkill( npc, tal );

    // Schrittweite - Index inkrementieren
    tal += 1;

    // Rekursion - Abbruchbedingung
    if ( tal < NPC_TALENT_MAX )
    {
        Npc_GetTalentSkillSum( npc );
    };

    // Ende - Index reinitialisieren
    tal = 0;

    return sum;
};

/** /
    // Beispielaufruf

    var int sum;
    sum = Npc_GetTalentSkillSum( hero );

    var string text;
    text = ConcatStrings( "Gelernte Talentstufen: ", IntToString( sum ) );

    PrintScreen ( text, -1, -1, FONT_Screen, 5 );	
/**/