program z użyciem funkcji, która oblicza n!
Johny:
Hej, muszę napisać program z użyciem funkcji, która oblicza n!
napisałem go tylko ze gdzies jest błąd, może ktoś sprawdzic
#include <stdio.h>
long int silnia(int n)
{
long int sil=1;
int i;
for(i=1;i<=n;i++)
sil=sil*i;
return sil;
}
int main()
{
int n;
printf("Prosze podac liczbe z ktorej chcesz policzyc silnie: ");
scanf("%d",&n);
printf("Silnia z %d rowna sie %ld\n",n,silnia(n));
return 0;
}
8 gru 20:41
Dziadek Mróz:
Algorytm jest błędny z zasady bo nie posiada ograniczeń.
0! = 1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
...
Są dwie metody:
− iteracyjna − taka jak Twoja
− rekurencyjna − krótsza w zapisie
Iteracyjna polega na wymnażaniu w pętli zmniejszających/zwiększających się ciągów liczb <= n.
Rekurencyjna polega na ograniczeniach w algorytmie, jak wyżej (0! = 1 i 1! = 1) oraz n! =
n*(n−1)!.
http://ideone.com/jRO9i5
W kodzie dodałem opcję zwracającą −1 dla n < 0. To zwykle jest kod błędu w takich przykładach
funkcji zwracających wartości >= 0.
11 gru 11:19