03 - Ricorsione

Post on 17-May-2015

146 views 0 download

transcript

RICORSIONETalk 3

DIGRESSIONE: STACK E HEAP

DIGRESSIONE: STACK E HEAP

DIGRESSIONE: CODICE RIENTRANTE

Codice che è possibile eseguire più volte in contemporanea.

• Non si modifica durante l'esecuzione.

• Non invoca routine non rientranti.

• Usa solo variabili allocate sullo stack.

• Non modifica aree di memoria condivisa (niente variabili globali o statiche).

Ricorsione:

vedi: Ricorsione.

program Recursion;!{$APPTYPE CONSOLE}!!procedure Recurse(I: Integer);!begin! Writeln(I);! Recurse(I + 1);!end;!!begin! Recurse(0);!end.

FUNZIONI RICORSIVE

public class Recurse {! public static void main(String[] args) {! recurse(0);! }!! private static void recurse(int i) {! System.out.println(i);! recurse(i + 1);! }!}

FUNZIONI RICORSIVE

(function recurse(i) {! console.log(i);! recurse(i++);!})(0);

FUNZIONI RICORSIVE

10 I = 0!20 PRINT I!30 I = I + 1!40 GOSUB 20

FUNZIONI RICORSIVE

DIVIDE AND CONQUER

• Suddividere il problema in sotto problemi.

• Risolvere ciascun problema nello stesso esatto modo del problema principale.

• Mettere insieme i risultati dei sotto problemi.

CONDIZIONE DI TERMINAZIONE

ESEMPIO: MERGESORT

PROBLEMI RICORSIVI

Non ci sono problemi intrinsecamente ricorsivi, ma algoritmi ricorsivi che risolvono i problemi.

STRUTTURE DATI RICORSIVE

• Albero dei parametri di RBI.

• Database delle anagrafiche di BBox.

• I punti della nuvola di punti.

OTTIMIZZAZIONE DI STRUTTURE DATI

• Implementazioni iterative di algoritmi ricorsivi.

• Strutture dati ausiliarie.

Ricorsione:

se non l'hai ancora capita vedi: Ricorsione.