Avem de ex functia clasica ce calculeaza factorialul unui numar:
int fact( int n) {
if(n==0)
return 1;
else
return n*fact(n-1);
}
Cum as putea face ca aceasta functie sa se execute doar pentru valori pozitive(>=0).Adica daca primeste o valoare negativa(ex: -5) sa nu se execute,am incercat sa folosesc unsigned dar tot se executa(se blocheaza programul dar tot se executa,nu primesc eroare in consola)
unsigned int fact(unsigned int n) {
if(n==0)
return 1;
else
return n*fact(n-1);
}
Se poate face asta?ma refer fara o conditie de genul if(n>=0)
int fact (int n)
{
if(n < 0)
return -1; //nu vrem valoare negativa. eventual poti sa pui si un mesaj aici
else if(n==0)
return 1;
else
return n*fact(n-1);
}
Am lucrat cu int, nu cu unsigned. Daca tu lasi unsigned si o sa ii dai un nr negativ, o sa iti tranteasca stackoverflow. (merci pt observatie @serghei )
PS: Serghei, sper ca nu am zis o tampenie @iamntz este posibila adaugarea in editorul de text a superscript si subscript ? Ca la word
De fapt “signed” şi “unsigned” sunt simple convenţii. Dacă asignezi “-5” unei variabile “unsigned” este că si cum i-ai da valoarea “4294967291”. Fiind vorba de o funcţie recursivă şi numărul foarte mare, îţi dă “stack overflow” (nu segfault). Exact acelasi rezultat l-ai avea daca ai folosi un numar pozitiv foarte mare.