4 messaggi dal 18 maggio 2005
c'è un anima pia nel forum che mi aiuterebbe a capire come funziona la ricorsione in C?ho un esame di programmazione all'università il 1° Giugno
Il manuale che dice?

Non capisci il manuale o non hai il manuale?
L'esame è teorico o pratico?
3.122 messaggi dal 16 maggio 2002
Eccoti un esempio in C di funzione ricorsiva. Questa calcola il fattoriale di un numero.

#include <stdio.h>

int main(char *args[]) {
    int f = fatt(5);
    printf("Il fattoriale di 5 è %d\n", f);
    return 0;
}

int fatt(int n) {
    if(n == 1)
        return 1;
    else    
        return n*fatt(n-1);
}

Modificato da Raynor il 19 maggio 2005 20.37 -

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
4 messaggi dal 18 maggio 2005
mi potresti spiegare in che senso la funzione è ricorsiva?cosa la rende ricorsiva?
scusa ma ho davvero bisogno di aiuto
Mi sa che siamo messi un po' maluccio qua e poi se non abbiamo neanche il manuale mi sa che lèesame non lo diamo neanche a settembre...

Cosa differenzia una funzione ricorsiva da una iterativa.

Un funzione iterativa è una semplice funzione che esegue in base a degli argomenti che gli vengono passati il codice al suo interno una solo volta fino ad arrivare alla restituzione di un risultato. La funzione viene esguita una sola volta.

Ti faccio un esempio in codice asp

esponenziale è il nome della funzione, numero1 e numero 2 sono 2 interi che vengono passati alla funzione
La funzione esegue il primo numero elevato al secondo

function esponenziale(numero1, numero2)
dim i, risultato
risultato=1
i=1
while i<=numero2
risultato=risultato*numero1
i=i+1
wend
esponenziale=risultato
end function

Se non ho scritto scemenze questa funzione ITERATIVA esegue il codice contenuto nel while fino a raggiungere il valore contenuto nella variabile numero2, e poi restituisce il risultato e quindi termina. Questa funzione viene eseguita solo una volta.



Nel caso di ricorsione invece la funzione richiama se stessa n volte fino a quando non arriva a verificare una condizione. Prendiamo come esempio la funzione che ha postato Raynor

int fatt(int n) {
if(n == 1)
return 1;
else
return n*fatt(n-1);


int fatt(int n) è il nome della funzione dove gli viene passato come parametro un numero intero n.

if n==1
return 1 abbastanza semplice : quando n vale 1 restituisci 1.

else altrimenti

return n*fatt(n-1); questo comando restituisce il valore di n moltiplicato il falore che restituirà la stessa funzione per il valore di n-1.

Facciamo un esempio pratico.

n=4 diventa sostituendo n

int fatt(4) {
if(4 == 1) NO N(4) DIVERSO DA 1
return 1;
else
return 4*fatt(4-1); quindi 4*fatt(3)

rieseguiamo il codice

int fatt(3) {
if(3 == 1) NO N(3) DIVERSO DA 1
return 1;
else
return 4*3*fatt(3-1); quindi 4*3*fatt(2)

in pratica cosa è successo abbioamo rieseguito il codice una seconda volta col valore n-1: 3 ed è diventato il primo
risultato (4) moltiplicato per il secondo(3) ancora moltiplicato il nuovo valore che ci restituirà la prossima esecuzione della funzione. La funzione termina solo quando N=1

quindi diventa :

int fatt(2) {
if(2 == 1) NO N(2) DIVERSO DA 1
return 1;
else
return 4*3*2*fatt(2-1); quindi 4*3*2*fatt(1)

quindi:

int fatt(1) {
if(1 == 1) SI FINALMENTE N=1
return 1; La funziona si ferma qua E RESTITUISCE 1
else
.....

quindi diventa 4*3*2*1

In pratica abbiamo eseguito lo stesso blocco di codice in modo ricorsivo(la funzione richiama se stessa) 4 volte.

Compra il libro è meglio
Modificato da Reemul il 19 maggio 2005 23.28 -
4 messaggi dal 18 maggio 2005
em..il libro ce l'ho..ma spiega male..e nn lo capisco..scusate il disturbo..è che mi serviva una mano a capire l'argomento..

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.