function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

Documenti analoghi
function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

studente = struct('nome', 'Giovanni', 'eta', 24) studente.nome = 'Giovanni'; studente.eta = 24;

studente = struct('nome', 'Giovanni', 'eta', 24) studente.nome = 'Giovanni'; studente.eta = 24;

studente = struct('nome', 'Giovanni', 'eta', 24) studente.nome = 'Giovanni'; studente.eta = 24;

Programmazione ricorsiva

RICORSIONE. Informatica B - A.A. 2013/2014

Matlab: funzioni. Daniele Loiacono, Vittorio Zaccaria

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA INFORMATICA B + C

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

Matlab: Funzioni. Informatica B. Daniele Loiacono

3 aprile o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri. si raccomanda la puntualita!

Iterazione Vs Ricorsione

Lezione di Laboratorio di Prgrammazione: /05/2019 a.a. 2018/2019 R.Prevete

x = input('inserisci x: '); fx = 1 for ii = 1 : x fx = fx * ii; end if (fx > 220) y = input('inserisci y: '); fy = 1 for ii = 1 : y fy = fy * ii; end

Iterazione Vs Ricorsione

Preparazione alla Seconda Prova in Itinere

Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n " 0 n! vale n*(n-1)! se n > 0. Codifica:

Programmazione Ricorsione

Operativamente, risolvere un problema con un approccio ricorsivo comporta

x = input('inserisci x: '); fx = 1 for ii = 1 : x fx = fx * ii; end if (fx > 220) y = input('inserisci y: '); fy = 1 for ii = 1 : y fy = fy * ii; end

Facoltà di Ingegneria Civile, Ambientale e Territoriale

Sottoprogrammi Diagrammi in MATLAB

A. Veneziani Funzioni e procedure in PHP

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

LA RICORSIONE LA RICORSIONE

Fondamenti di Informatica

Passaggio di Parametri per Valore o Indirizzo

Programmazione ricorsiva

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

Fondamenti di Informatica T-1 Modulo 2

Obiettivi di questa esercitazione

Ricorsione. Prof. Orazio Mirabella. La ricorsione. La ricorsione consiste nella possibilità di definire una funzione mediante se stessa.

Problema: stampa degli interi compresi tra n e m

LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

La Ricorsione. Carla Binucci e Walter Didimo

Fondamenti di Informatica T-1 Modulo 2

TECNOLOGIE E PROGETTAZIONE SISTEMI INFORMATICI E DI TLC (Tpsit) Novembre AIT Docente Salvatore Mosaico Tecnologia html/javascript

Fondamenti di Informatica

1. Passaggio dei parametri per valore/riferimento 2. Trattamento degli errori: funzioni che

LEONARDO OPRANDI PALMA GUSSAGO NICOLA AVIGO ZANETTI SILVIA

RICORSIONE RICORSIONE

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Diverse politiche. La ricorsione PROGRAMMAZIONE TOP-DOWN ESEMPIO. Bottom-Up. Di solito è meglio alternare le due tecniche

Obiettivi di questa esercitazione. Fondamenti di Informatica T-1 Modulo Passaggio dei parametri per valore/riferimento

Fondamenti di Informatica T-1 Modulo 2

Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

esegui Ricerca_binaria (metà sinistra di A, v) esegui Ricerca_binaria (metà destra di A, v)

Ricorsione. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

ES IS ORIGINAL COMPRESSORSS

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2

fprintf('avete speso %d (media %f)', somma, media);

3

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Fondamenti Teorici e Programmazione

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona

Ricorsione. Lucidi a cura di Gianpaolo Cugola, Carlo Ghezzi, Gian Pietro Picco Dipartimento di Elettronica e Informazione

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Elementi di Algebra e Logica Esercizi 1. Insiemi, funzioni, cardinalità, induzione, funzioni ricorsive.

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Record di Attivazione Cenni sulla ricorsione

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

Fondamenti di Informatica, A.A

1 Scheda n. 1s: il problema Manhattan 2. 2 Scheda n. 2s: simulazione dell algoritmo ricorsivo 3

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

ESERCIZIO 1. Informatica B - Esercitazione 14

Programmazione Ricorsione in coda

Introduzione alla Ricorsione

Esercizi sulla ricorsione

Laboratorio di Informatica L-A 1

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa

Corso di Linguaggi di Programmazione

Corso di Fondamenti di Informatica Macroarea di Ingegneria 2017/18. Tutor: prof. Francesco De Vincenzi

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. La Ricorsione. Marco D. Santambrogio Ver. aggiornata al 12 Maggio 2016

Introduzione allo Scilab Parte 2: elementi di programmazione strutturata

Fondamenti dell informatica

Il linguaggio C Il modello a run-time

Il linguaggio C Il modello a run-time

Procedure: esempi. Esempi: ricorsione fattoriale Fibonacci ordinamenti

Sommario della Lezione

Tela (Teaching Language)

Introduzione al MATLAB c Parte 2

CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

La principale modalità di calcolo è l applicazione di funzioni

Esempio : i numeri di Fibonacci

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Esercizi lezione 23/3/15, Andrea Vaccaro

Integrazione numerica. Gabriella Puppo

Crittografia. Nozioni di Algebra. Corso di Laurea Specialistica. in Informatica

Transcript:

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii;

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; n! n > 0 n! = n n 1 n 2 2 1

fattoriale(2) ans = 2 function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii;

fattoriale(2) ans = 2 function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii;

k = 2; f2 = fattoriale(k); function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii;

k = 2; f2 = fattoriale(k); function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; n, f, ii k f2

f2 = fattoriale(2) f2 = 2 f3 = fattoriale(3) f3 = 6 f5 = fattoriale(5) f5 = 120 f6 = fattoriale(6) f6 = 720 f4 = fattoriale(4) f4 = 24

n! = n n 1! n! = n n 1 n 2 2 1 n 1!

function [f] = factric(n) if (n == 0) f = 1; f = n * factric(n - 1);

function [f] = factric(n) if (n == 0) f = 1; f = n * factric(n - 1); 0! = 1

function [f] = factric(n) if (n == 0) f = 1; f = n * factric(n - 1); n! = n n 1!

f(n) = n! = n (n 1) (n 2) 3 2 1

f(n) = n! = n (n 1) (n 2) 3 2 1 f(n) = n f(n 1) f(0) = 1

f(n) = n! = n (n 1) (n 2) 3 2 1 f(n) = n f(n 1) f(0) = 1 function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1);

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3)

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1); factric(3) ans = 6

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1);

function [f]=factric(n) f=n*factric(n-1);

function [f]=factric(n) if (n==0) f=1; f=n*factric(n-1);

function [f]=factric(n) if (n==0) f=1; f=n*factric(n);

>> factric(600) Out of memory. The likely cause is an infinite recursion within the program. Error in fatric at line XXX

function somma = sommanumericompresi(a,b) if a == b somma = a; disp(['caso base somma vale ', num2str(somma)]); disp(['prima chiamata a = ',num2str(a)]); somma = a + sommanumericompresi(a+1, b); disp(['dopo chiamata a = ',num2str(a)]);

function somma = sommanumericompresi(a,b) if b< a somma = 0; if a == b somma = a; disp(['caso base somma vale ', num2str(somma)]); disp(['prima chiamata a = ',num2str(a)]); somma = a + sommanumericompresi(a+1, b); disp(['dopo chiamata a = ',num2str(a)]);

function somma = sommanumericompresi(a,b) if b< a somma = 0; return; if a == b somma = a; disp(['caso base somma vale ', num2str(somma)]); disp(['prima chiamata a = ',num2str(a)]); somma = a + sommanumericompresi(a+1, b); disp(['dopo chiamata a = ',num2str(a)]);

function somma=calcolasommacompresi2(a_temp,b_temp) a=min([a_temp,b_temp]); b=max([a_temp,b_temp]); if(a==b) disp(['caso base 1 a=',num2str(a),'b=',num2str(b)]) somma=a; if(b-a==1) disp(['caso base 2 a=',num2str(a),'b=',num2str(b)]) somma=a+b; disp(['prima della chiamata ricorsiva a=',num2str(a),'b=',num2str(b)]) somma=a+calcolasommacompresi2(a+1,b-1)+b; disp(['dopo la chiamata ricorsiva a=',num2str(a),'b=',num2str(b),' somma =',num2str(somma)])

function somma = sommacompresi(a, b) % calcolare la somma degli interi tra a e b if(b < a) somma = 0; return a b a == 1 b < if (a == b) somma = a; somma = a + sommacompresi(a + 1, b - 1) + b;

function gg = stagno(n, f, N) % caso base: se ho già N ninfee nello stagno % non devo aspettare alcun giorno if (n >= N) gg = 0; % non abbiamo ancora N ninfee -> chiamata ricorsiva: % il numero di giorni necessari per coprire lo stagno è % uguale a: un giorno + % il numero di giorni che saranno necessari domani % (quando le ninfee saranno diventate n*f). gg = 1 + stagno(n * f, f, N);

function [giorni, vettore_n] = ninfee(n, f, N) % caso base if (n >= N) giorni = 0; vettore_n = []; fprintf('\n caso base oggi ho %2.2f ninfee', n); ndomani = round(n * f); if ndomani == n giorni = nan; fprintf('\ncrescita o popolazione iniziale insufficiente'); return % chiamata ricorsiva fprintf('\n oggi ho %2.2f ninfee', n); % la popolazione aumenta [giorni, vettore_n] = ninfee(ndomani, f, N); giorni = giorni + 1; vettore_n = [ndomani, vettore_n];

function s = calcolalunghezza(str) if(isempty(str)) s = 0; s = 1 + calcolalunghezza(str(2 : ));

function stampaalcontrario(frase) % caso base if isempty(frase) % return % chiamata ricorsiva disp(frase()); % stampa al contrario stampaalcontrario(frase(1:-1))

function stampaalcontrario(frase) % caso base if isempty(frase) % return % chiamata ricorsiva stampaalcontrario(frase(1:-1)) disp(frase()); % stampa dritto

function stampa(frase) % caso base if isempty(frase) % return stampa(frase(2:)) disp(frase(1));

function stampa(vettore) if (length(vettore)==1) % caso base fprintf('%c',vettore(1)); fprintf('%c',vettore(1)); fprintf('%c',vettore(1)); stampa(vettore(2:)); fprintf('%c',vettore(1));

function stampaalcontrario(str) if(isempty(str)) % return disp(str()); stampaalcontrario(str(1 : -1)); disp(str());

function stampaalcontrario(str) if(isempty(str)) % return disp(str()); stampaalcontrario(str(1 : -1)); disp(str());

function stampaalcontrario(str) if(isempty(str)) % return disp(str()); stampaalcontrario(str(2 : )); disp(str());

function stampaalcontrario(str) if(isempty(str)) % return disp(str()); stampaalcontrario(str(2 : )); disp(str());

function stampaalcontrario(str) if(isempty(str)) % return disp(str(1)); stampaalcontrario(str(2 : )); disp(str(1));

function stampaalcontrario(str) if(isempty(str)) % return disp(str(1)); stampaalcontrario(str(2 : )); disp(str(1));

function stampaalcontrario(str) if(isempty(str)) % return disp(str(1)); stampaalcontrario(str(1 : -1)); disp(str(1));

function stampaalcontrario(str) if(isempty(str)) % return disp(str(1)); stampaalcontrario(str(1 : -1)); disp(str(1));

function vet = chefa(vet) % dimmi che fa if isempty(vet) length(vet) == 1 return if all(vet(1) >= vet(2 : )) % punto 1) del codice return vet(vet == vet(1)) = []; vet = chefa(vet); >> chefa([19 18 12 19 12 3]) >> chefa([7 18 13 19 12 3]) >> chefa([ 2 3 18 12 19 12 3])

>> chefa([ 19 18 12 19 12 3]) ans = 19 18 12 19 12 3 >> chefa([7 18 13 19 12 3]) ans = 19 12 3 >> chefa([ 2 3 18 12 19 12 3]) ans = 19

)) all(vet(1) > vet(2 : >> chefa([ 19 18 12 19 12 3]) ans = 18 12 12 3

30 18 12 18 12 6 6 6

function [M]=MCDeuclidRic(m,n) if m==n M=m; if m>n M = MCDeuclidRic(m-n,n); M = MCDeuclidRic(m,n-m);

+ + 1 1 1

function [fib]=fiboric(n) if n==1 n==2 fib=1; fib=fiboric(n-2)+fiboric(n-1);

function [fl]=fiblist(n) fl(1)=1; fl(2)=1; for k=3:n fl(k)=fl(k-2)+fl(k-1);

n d n d

function r=cosafa(array) k=size(array,2); if (k == 1) r = 1; if (k==2) if (array(1)+array(2)==10) r = 1; r=0; if (array(1)+array(k)==10) r = cosafa(array(2:k-1)); r=0;

function [ris] = mistero(v, n) if (n > 1) v2 = v(mod(v, n) ~= 0 v == n); ris = mistero(v2, n-1); ris = v;

f a, b f a f b 0 c a, b f c = 0. f

calcolazeri f a, b f x == 0 f x < ε ε