Dicembre 2008 Archives

Programmazione ricorsiva

in Informatica | No Comments

Una tecnica di programmazione è la ricorsione.

La ricorsione in informatica consiste nel costruire una funzione che richiama se stessa in modo ricorsivo.

Per esempio se voglio creare una funzione che fa la somma di due numeri positivi, posso definire la funzione "somma" passandogli come parametri i valori da sommare. in questo modo:

funzione somma (x, y)
{
z=x+y
return z
}

La funzione somma() è una funzione normale molto semplice e non ricorsiva che restituisce la somma di x e di y.

Proviamo a renderla ricorsiva:
La cosa è molto semplice e banale:

funzione somma_ricorsiva (x,y)
{
if y > 0 { somma_ricorsiva (x+1,y-1) }
else return x
}

Cosa ho fatto? Anziché sommare x e y ho usato il parametro y come variabile di controllo per contare quante volte sommare 1 a x richiamando la stessa funzione all'interno di se stessa.

Collaudiamo la nostra funzione.

Proviamo ad eseguire la somma di 10 + 10. Per farlo dobbiamo scrivere la nostra funzione ricorsiva in un linguaggio appropriato e comprensibile dal browser e che sia sintatticamente corretta. Scegliamo Javascript come linguaggio di programmazione script e scriviamola come pagina html in modo che sia testabile dal browser. Il browser deve essere abilitato ad eseguire javascript altrimenti lo script non viene eseguito dal browser. Creiamo un file di testo e chiamiamolo ricorsione.html, apriamolo con notepad e al suo interno scriviamo le seguenti istruzioni:

<html><head></head>
<body>
La somma dei due numeri è uguale a :

<script language="Javascript">

function somma_ricorsiva (x,y)
{
if (y > 0) { somma_ricorsiva (x+1,y-1) }
else return document.write (x);
}

somma_ricorsiva (10,10);

</script>
</body>
</html>

Copiate le istruzione precedenti, salviamo il file ricorsione.html e carichiamolo con il browser preferito. Dovremmo vedere a video il risultato di 10+10 che è 20.

I limiti

La programmazione ricorsiva è una tecnica di programmazione molto potente, ma è pericolosa se non la si riesce a controllare bene. Infatti programmare ricorsivamente comporta forti limitazioni dovute alla quantità di memoria che abbiamo a disposizione del browser per eseguire lo script. Devi sapere che ogni volta che la funzione chiama se stessa, occorre allocare memoria per lo script e nel caso si debba richiamare molte volte in modo ricorsivo la stessa funzione, c'è il rischio di esaurire la memoria a disposizione.

Ad esempio, vedi se riesci a sommare 100000 e 100000. Probabilmente lo script va in errore e non viene eseguito.

Bisogna quindi essere consci, prima di cimentarsi con funzioni ricorsive, di avere abbastanza memoria a disposizione per le nostre necessità facendo un test di memoria in runtime prima di chiamare una funzione ricorsiva e valutare se continuare o fermarsi per evitare di andare in overflow di memoria. Il test di memoria naturalmente rallenta molto lo script ed è quindi a discrezione del programmatore valutare quando farlo in software mission critical o meno.

Ti è piaciuto questo post? Bene, io ti ho dato il la, ora fai le tue prove, modificando e aggiungendo cose nuove alla funzione ricorsiva o provando ad inventarti una tua funzione ricorsiva che faccia qualcosa di utile per l'umanità (ad esempio puoi provare a modificarla in modo che tratti anche numeri negativi), secondo la tua fantasia, documentandoti sul linguaggio Javascript (se non lo conosci) che è molto bello.
Tuttavia non mi stressare con domande sulla programmazione ricorsiva, perché non ho molta voglia e tempo per rispondere.

Asus G71V recensione e Bios reset

in Hardware | 18 Comments

Il notebook Asus G71V modello 7T029G è un computer portatile basato su piattaforma Intel Centrino 2 Duo, di prestazioni medio - elevate che sto testando in questi giorni.

Tra i vari test che ho eseguito c'è anche quello dell'aggiornamento del Bios nelle sue varie configurazioni che mi hanno fatto tribolare non poco.

C'è da dire che il portatile nella configurazione standard di fabbrica funziona bene, è veloce e stabile sia sotto Windows Vista, sia sotto Windows XP (quest'ultimo con i driver corretti da reperire in rete, perché non vengono forniti dalla Asus). Non ho ancora avuto modo di testarlo con Linux (avendo già lui un mini Linux incorporato).

Archives

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.35-en