La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Eliminare la ricorsione ovvero gestire direttamente la pila.

Presentazioni simili


Presentazione sul tema: "Eliminare la ricorsione ovvero gestire direttamente la pila."— Transcript della presentazione:

1 eliminare la ricorsione ovvero gestire direttamente la pila

2 maggio 2003ASD - eliminare la ricorsione2 perché la ricorsione? strumento potente per descrivere/progettare algoritmi idea fondamentale: risolvere un problema di "taglia" (dimensione dell'input) n sfruttando le soluzioni di uno o più problemi simili ma di taglia m < n spesso risulta m = n - 1

3 maggio 2003ASD - eliminare la ricorsione analizziamo un algoritmo ricorsivo void treePreorder(root) { if(root == null) return; r = root.firstChild while (r != null) { treePreorder(r); r = r.nextSibling; } a bcd gfe

4 maggio 2003ASD - eliminare la ricorsione4 analisi esecuzione a bcd gfe void treePreorder(root) { if(root == null) return; r = root.firstChild while (r != null) { treePreorder(r); r = r.nextSibling; } root = a r = b root = b r = e root = e r = null root = a r = b root = a r = c root = a r = c root = a r = c root = a r = d root = a r = null root = b r = null root = c r = f root = f r = null root = c r = g root = g r = null root = c r = null root = d r = null

5 maggio 2003ASD - eliminare la ricorsione5 gestione esplicita della pila void iterativeTreePreorder(root) { if(root == null) return; pila.push(root); while(!pila.isEmpty()) { v = pila.pop(); if(v.nextSibling != null) pila.push(v.nextSibling); if(v.firstChild != null) pila.push(v.firstChild); }

6 maggio 2003ASD - eliminare la ricorsione6 esecuzione iterativa void iterativeTreePreorder(root) { if(root == null) return; pila.push(root); while(!pila.isEmpty()) { v = pila.pop(); if(v.nextSibling != null) pila.push(v.nextSibling); if(v.firstChild != null) pila.push(v.firstChild); } a bcd gfe ab ecec fdfd c gdgd d stato pila inizio corpo while

7 maggio 2003ASD - eliminare la ricorsione7 ricorsione vs. iterazione vantaggi ricorsione intuitiva ed elegante semplifica la costruzione di algoritmi vantaggi iterazione non ci sono "costi nascosti" pila gestita esplicitamente, più efficientemente rispetto alla pila dei record di attivazione del supporto runtime


Scaricare ppt "Eliminare la ricorsione ovvero gestire direttamente la pila."

Presentazioni simili


Annunci Google