De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Gameprogrammeren: Recursie

Verwante presentaties


Presentatie over: "Gameprogrammeren: Recursie"— Transcript van de presentatie:

1 Gameprogrammeren: Recursie
Arjan Egges Paul Bergervoet Wouter van Toll

2 Wat is recursie? Binnen een methode/property X diezelfde X opnieuw aanroepen, normaal gesproken met andere parameters Soort tegenhanger van while/for-loops Loop: herhaal acties ‘na elkaar’ Recursie: herhaal acties ‘in elkaar’ Vaak zijn ze allebei mogelijk Soms is de ene logischer dan de andere

3 Eerste voorbeeld Net als bij een loop: geef aan wanneer het stopt
Bij recursie is dit een base case Dan is het probleem “klein genoeg” om direct antwoord te geven Voorbeeld zonder base case: Gaat oneindig door! public int product(unsigned int a, unsigned int b) { return (a + product(a-1, b)); }

4 (Op zich niet nodig: waarom niet?)
Eerste voorbeeld Zelfde methode, maar met terminatie: public int product(unsigned int a, unsigned int b) { if (a == 0) return 0; else return (b + product(a-1, b)); } Stoppen indien a == 0 (Op zich niet nodig: waarom niet?)

5 Ander voorbeeld van recursie
Wat is hier de terminatieconditie? public virtual Vector2 GlobalPosition { get if (parent != null) return parent.GlobalPosition + this.Position; else return this.Position; } Zelfde property aanroepen in ander object

6 Recursief zoeken naar game-objecten
public GameObject Find(string id) { foreach (GameObject obj in gameObjects) if (obj.ID == id) return obj; if (obj is GameObjectList) GameObjectList objlist = obj as GameObjectList; GameObject subobj = objlist.Find(id); if (subobj != null) return subobj; } return null; Methode in de GameObjectList-klasse. Gebruik is om te kijken of een object van een bepaald type is. Methode roept ‘zichzelf’ aan: recursie

7 Publieksvraag Schrijf een methode ‘grootste’ met de volgende header:
Uitvoer moet zijn: het grooste getal uit de lijst Maak gebruik van recursie! public int grootste(List<int> lijst, int aantal)

8 Uitwerking public int grootste(List<int> lijst, int aantal) {
if (aantal == 1) return lijst[0]; else int grootsteRest = grootste(lijst, aantal-1); if (grootsteRest > lijst[aantal-1]) return grootsteRest; return lijst[aantal-1]; }

9 Publieksvraag Wat is de uitkomst als we de getallen 1 t/m 9 aan de volgende methode als parameter meegeven? int puzzle(int n) { if (n == 1) return 1; if (n % 2 == 0) return puzzle(n/2); else return puzzle(3*n+1); } Collatz conjecture (not proven yet): always results in 1


Download ppt "Gameprogrammeren: Recursie"

Verwante presentaties


Ads door Google