Witam, mam pytanie czemu program mi się nie chce poprawnie skompilować, mianowicie program ma liczyć silnie rekurencyjnie i działa dobrze w takiej postaci:
int main()
{
unsigned int n;
printf("Podaj n:\n");
scanf("%u", &n);
printf("%u", silnia(n));
return 0;
}
int silnia(unsigned int a){
return (a) ? a * silnia(a-1) : 1;
}
Ale jako że silnia przyjmuje duże wartości to chciałem użyć unsigned long long int, czyli
int main()
{
unsigned int n;
printf("Podaj n:\n");
scanf("%u", &n);
printf("%llu", silnia(n));
return 0;
}
unsigned long long int silnia(int a){
return (a) ? a * silnia(a-1) : 1;
}
ale się już nie chce skompilować w tym momencie (codeblock). Jak podejrzewam może to mieć związek z tym, że to jest f. rekurencyjna i zwraca również samą siebie. Jak to poprawić?
ps. chciałbym również się spytać o taką rzecz - czy słowo operand odnosi się do np %d?
ps2. chciałbym się upewnić, czy jak dla floata jest %f, to dla double jest %lf? bo tak gdzieś wyczytałem i nie jestem pewien