06/06/10 13:15
Poggi Marco
Postato originariamente da gforce:
Postato originariamente da carlduke:
xd....giusto...nnn avevo visto..Lol
la sai fare ricorsiva ?
Credo basta fare così:
#include <stdio.h>
int roll(int);
int main(int argc, char *argv[])
{
int x = 2;
printf("%d\n%d\n", x,roll(x));
getchar();
return 0;
}
int roll(int y)
{
if (y==0)
{
return 0;
}
else
{
printf("%d\n", y);
return roll(--y);
}
}
Ultima modifica effettuata da Poggi Marco 06/06/10 13:16
aaa
06/06/10 13:29
TheKaneB
l'unica soluzione corretta è quella di Poggi Marco :-)
Ragazzi, se non sapete che vuol dire "funzione ricorsiva" non postate ciaffate, altrimenti fate solo confondere le idee a chi cerca chiarimenti!
@gforce: in generale una funzione ricorsiva, per funzionare correttamente, deve essere strutturata in 2 parti: caso base e passo ricorsivo.
Il caso base è quello in cui la funzione restituisce un valore ben definito. Il passo ricorsivo è quello in cui il valore è determinato da una seconda chiamata alla stessa funzione.
come ti ha mostrato Poggi Marco, in questo caso il caso base è dato da y == 0, mentre il passo ricorsivo è dato da y > 0 e la ricorsione è costruita in modo tale da decrementare progressivamente la y fino a raggiungere il caso base (che termina la catena di ricorsioni).
aaa
06/06/10 20:28
Poggi Marco
La ricorsione non funziona come un ciclo while.
Il comando return termina bruscamente la funzione in corso, però , in questo caso viene effettuata una nuova chiamata alla funzione roll.
Per capire meglio il meccanismo, prova a fare il debug del programma.
aaa