Tail recursion: esempio

Slides:



Advertisements
Presentazioni simili
Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Advertisements

Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Algoritmi Avanzati Grafi e Alberi
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Strutture dati elementari
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II
APPUNTI SUL LINGUAGGIO C
LdL - LP1 - ver. 6 - lez aa Linguaggi di programmazione I La ricorsione Prof. Luigi Di Lascio Lezione 10.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Esercizi su alberi binari
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Le liste dinamiche La ricorsione
Le funzioni.
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
AN Fondam98 Sorting Ricerca in un vettore ordinato.
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Algoritmi e Strutture Dati
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
void binario(int n); …………………
Programmazione di Calcolatori
Esercizi su File.
Esercizi Liste.
Esercizi su File e Liste
Grafi Rappresentazione mediante liste di adiacenza:
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Ricerca sequenziale in un array di interi
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Esercitazioni su liste
1 Un esempio con iteratore: le liste ordinate di interi.
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Un esempio con iteratore: le liste ordinate di interi.
APPUNTI SUL LINGUAGGIO C
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Alberi n-ary Lezioni di C.
esercizi alberi binari
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Transcript della presentazione:

Tail recursion: esempio Scrivere una funzione ricorsiva che, dato un array ordinato di interi, determini se l’intero x è presente nell’array. int ricerca_binaria(int *array, int a, int b, int x)‏ { int mid = (a+b)/2; if (a > b) return 0; if (array[mid] == x) return 1; else if (array[mid] < x) return ricerca_binaria(array, mid+1, b, x); else return ricerca_binaria(array, a, mid-1, x); }

Esercizi su tail recursion Scrivere una funzione ricorsiva che, data una lista di interi positivi, restituisca il massimo intero nella lista. Implementare la funzione con e senza tail recursion. Scrivere una funzione ricorsiva che, data una lista di interi, restituisca la loro somma. Utilizzare la tail recursion. Scrivere una funzione ricorsiva che restituisce la media degli elementi di una lista di interi positivi. Utilizzare la tail recursion. Scrivere una funzione ricorsiva che converta una lista in una lista circolare. Scrivere una funzione ricorsiva che cerchi un elemento in una lista circolare. Utilizzare la tail recursion. Scrivere una funzione ricorsiva che conti il numero di elementi di una lista circolare. Utilizzare la tail recursion. NOTA: scrivere sempre pre e post condizione di ogni funzione

Esercizio 1 Scrivere una funzione ricorsiva che, data una lista di interi positivi, restituisca il massimo intero nella lista. Implementare la funzione con e senza tail recursion. Pre condizioni: La funzione prende in ingresso una lista di interi positivi Post condizioni: La funzione restituisce l’intero di massimo valore nella lista e 0 se la lista è vuota

Implementazione ricorsiva #define MAX(a, b) (a > b ? a : b)‏ int max(struct list *l)‏ { if (l == NULL) return 0; return MAX(l->el, max(l->next)); }

Implementazione ricorsiva con tail recursion int max(struct list *l, int mx)‏ { if (l == NULL) return mx; if (l->el > mx) mx = l->el; return max(l->next, mx); } int max_tr(struct list *l)‏ return max(l, l->el);

Esercizio 3 Scrivere una funzione ricorsiva che restituisce la media degli elementi di una lista di interi positivi. Utilizzare la tail recursion. Pre condizioni: la funzione prende in ingresso una lista di interi positivi Post condizioni: La funzione restituisce la media (somma degli elementi / numero degli elementi)‏

Svolgimento int avg(struct list *l, int somma, int n)‏ { if (l == NULL) return somma/n; somma += l->el; n++; return avg(l->next, somma, n); } int avg_tr(struct list *l)‏ return avg(l, 0, 0);

Esercizio 4 Scrivere una funzione ricorsiva che converta una lista in una lista circolare. Pre condizioni: la funzione prende in ingresso una lista Post condizioni: la funzione rende la lista circolare (restituisce NULL se la lista è vuota)‏

Svolgimento void rendi_circolare(struct list *l, struct list *s)‏ { if (l->next == NULL) l->next = s; else rendi_circolare(l->next, s); } void rendi_circolare_tr(struct list *l)‏ if (l == NULL) return NULL; rendi_circolare(l, l);

Esercizio 5 Scrivere una funzione ricorsiva che cerchi un elemento in una lista circolare. Utilizzare la tail recursion. Pre condizioni: la funzione prende in ingresso una lista circolare e un elemento Post condizioni: la funzione restituisce 1 se l’elemento è stato trovato, 0 altrimenti.

Svolgimento int ricerca(struct list *l, struct list *s, int x)‏ { if (l->next == s) return l->el == x; return l->el == x || ricerca(l->next, s, x); } int ricerca_tr(struct list *l, int x)‏ if (l == NULL) return 0; return ricerca(l, l, x);