Silnia iteracyjnie i rekurencyjnie

0

Witam.
To mój pierwszy post na forum, mógłby ktoś pomóc mi w poprawie tego programu bo jestem Świeżakiem w programowaniu, kazali zrobić to się starałem, ale cienko wyszło :)

Generalnie zadanie brzmiało tak: Napisz program, który wyznacza silnię dla dowolnej liczby naturalnej n wpisywanej z klawiatury metodą wybraną przez użytkownika. Program powinien posiadać dwie funkcje do wyznaczania silni:

metodą iteracyjną ze wzoru definicyjnego: n! = 12...n,
metodą rekurencyjną zgodnie z definicją: n! = n
(n-1)! przy czym 0! = 1.

Wyznacz doświadczalnie maksymalne wartości n, dla których można wyznaczyć silnię przy zastosowaniu w programie wszystkich poznanych typów zmiennych całkowitych i rzeczywistych.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int rekr() //int - 12, float - , double -  
{
int wynik,n,i;
wynik=1;
printf("Podaj liczbe, ktorej silnie chcesz obliczyc \n");
scanf("%d",&n);
if (n<0)
printf("Wpisales liczbe ujemna, z ktorej nie mozna obliczyc n! \n");
else if (n>20)
printf("Wpisales za duza liczbe, najwieksza dopuszczalna to 20 \n");
else
{
i=n; //będziemy mnozyć aktualny wynik przez "i" i zmniejszać "i" o 1 w każdej iteracji
while(i>0)
wynik*=i--;
printf("%d! wynosi %d \n",n,wynik);
}
//system("PAUSE");

}

int inte()
{
int wynik=1,i,n;
printf("Podaj liczbe, ktorej silnie chcesz obliczyc \n");
scanf("%d",&n);

for (i=1; i<=n; i++)
{
wynik *= i;
}

printf("%d! wynosi %d \n",n,wynik);
}

int main()
{
int choice;
printf("1.Wyznacza silnie metoda rekurencyjna\n2.Wyznacza silnie metoda iteracyjna\n3.EXIT\n");
scanf("%d", &choice);

switch(choice)
{
case 1:rekr(); break;
case 2:inte(); break;
case 3:system("PAUSE"); return 0;


}
system("PAUSE");
return 0;
} 

Bardzo dziękuje za wszelaką pomoc. Pozdrawiam, abee.

0

co to jest rekurencja -> http://pl.wikipedia.org/wiki/Rekurencja

tak np piszesz silnię rekurencyjnie

#include <stdio.h>
#include <stdlib.h>

int factorial(int n);

int main()
{
	printf("%d", factorial(7));

	return 0;
}

int factorial(int n)
{
	if(n == 0) {
		return 1;
	}

	return n * factorial(n - 1);
}

http://melpon.org/wandbox/permlink/1hqGW0u66yuH2ojd

1 użytkowników online, w tym zalogowanych: 0, gości: 1