Dunque, sono un attimo in difficoltà con la comprensione di alcuni passaggi che riguardano un programma ricorsivo.
Esposizione:
La ricorsione prevede che all'interno della funzione ricorsiva, sia generata una chiamata ricorsiva (o passo ricorsivo) in modo da suddividere un caso piu complesso, rispetto a quello base, in modo da far convergere il complesso verso il medesimo base...quindi.
Esempio:
#include <stdio.h>
long factorial (long);
main()
{
int i;
for(i = 1; i < 5; i++);
printf("%2d! = %1d\n", i, factorial(i));
return 0;
}
long factorial (long number){
if(number <= 1)
return 1;
else
return (number * factorial(number - 1));
}
Allora, entriamo col numero 5 direttamente nella definizione di funzione, intesa come chiamata ricorsiva, il primo passo è l'if o else, in cui controllerà se ci sia il caso che conosce già, parte concettuale nota, altrimenti se il numero è superiore si entrerà nella chiamata ricorsiva, parte concettuale non nota.
bene ora il problema è qui che non mi è tanto chiaro...nel senso, io credo che funzioni cosi:
return (5 * factorial (5 - 1));
a sto punto creerà una nuova copia del problema, ma leggermente piu piccolo ovvero:
return (5 * factorial (4)); e poi
return(20 * factorial(3);
fino ad ottenere 1, e quindi 120?? è corretto il senso logico della questione??