Iteracja c++ potrzeba wyjaśnienia

0

Witam!Potrzebuje wyjasnienia pewnego programu w którym wykorzystywana jest rekurencja....
Oto kod:

#include <cstdlib>
#include <iostream>

using namespace std;

//fukcja
int f(int a);

int main()
{
//silnia iteracja

int n;
cout<<"Podaj liczbe\n";
cin>>n;
cout<<"Silnia jest rowna\n";
cout<<f(n)<<endl;

system("PAUSE");
return 0;
}

int f(int a)
{
int wynik;
if (a != 0)//tutaj czy = 0 czy nie
{
wynik = 1;
for(int i=1; i<=a; i++)
{
wynik = wynik * i;
}
}
else
{
wynik = 1;
}
return wynik;
} 

W tym programie wykorzystana jest iteracja,tylko właśnie nie wiem w którym miejscu jest ta iteracja,i na czym ona polega?
Potrzebował bym ogólnego wyjaśnienia tego programu co jak i dlaczego?

Z góry dziękuję

0

Ta iteracja to jest ta pętla for w funkcji f i ta funkcja nie ma nic wspólnego z rekurencją. Rekurencja to wywoływanie samej siebie.
Zacznij formatować kod, bo to się tragicznie czyta.

Silnia iteracyjnie:

int silnia(int a)
{
    int wynik = 1;

    for(int i = 2; i <= a; i++)
    {
        wynik *= i;
    }

    return wynik;
}

Silnia rekurencyjnie:

int silnia(int a)
{
    if(a > 1)
    {
        return a * silnia(a - 1);
    }
    else
    {
        return 1;
    }
}

Rozwiązanie iteracyjne jest duuużo szybsze.

http://pl.wikipedia.org/wiki/Iteracja
http://pl.wikipedia.org/wiki/Rekurencja

0

Ten sam kod (w prostrzej formie do czytania):

 


#include <cstdlib>
#include <iostream>

using namespace std;

//fukcja
int f(int a);

int main()
{
	//silnia iteracja

	int n;
	cout<<"Podaj liczbe\n";
	cin>>n;
	cout<<"Silnia jest rowna\n";
	cout<<f(n)<<endl;

	system("PAUSE");
	return 0;
}

int f(int a)
{
	int wynik;
	if (a != 0)//tutaj czy = 0 czy nie
	{
		wynik = 1;
		for(int i=1; i<=a; i++)
		{
			wynik = wynik * i;
		}
	}
	else
	{
		wynik = 1;
	}
	return wynik;
} 

iteracja to jest nic innego, jak powtarzanie jakichś instrukcji w pętli. Pętle w C to
"while" i "for".

while("warunek dla kręcenia się pętli")

pętla for = pętla while, tylko w for można dodać dodatkowo warunki początkowe pętli i krok każdego obrotu pętli, czyli krok iteracji.
for (; warunek kręcenia się pętli; )

np., for (int i = 0; i < 5; ++i)
będzie zwiększać zmienną i=0 o jeden, aż warunek i<5 będzie fałszywy, czyli dla i = 0, 1, 2, 3, 4,
a więc 5 iteracji (5 obrotów).

0
byku_guzio napisał(a)

Ta iteracja to jest ta pętla for w funkcji f i ta funkcja nie ma nic wspólnego z rekurencją. Rekurencja to wywoływanie samej siebie.
Zacznij formatować kod, bo to się tragicznie czyta.

Silnia iteracyjnie:

int silnia(int a)
{
    int wynik = 1;

    for(int i = 2; i <= a; i++)
    {
        wynik *= i;
    }

    return wynik;
}

Silnia rekurencyjnie:

int silnia(int a)
{
    if(a > 1)
    {
        return a * silnia(a - 1);
    }
    else
    {
        return 1;
    }
}

Rozwiązanie iteracyjne jest duuużo szybsze.

http://pl.wikipedia.org/wiki/Iteracja
http://pl.wikipedia.org/wiki/Rekurencja

Racja,pomyłka to nie rekurencja tylko iteracja...
A na czym ona polega,i co ona roib?

0

Mnoży zmienną wynik przez i oraz zwiększa i. Na wikipedii masz co to jest iteracja, post wyżej też masz wyjaśnione(prościej już się chyba nie da).

0

A więc w twoim kodzie nie ma rekurencji, bo by musiała być wywoływana ta sama funkcja w funkcji.

0

iteracja to powtarzanie, więc dzięki temu, że są pętle, to możesz napisać ile razy ma się wykonać jakiś kod, a tak byś musiał skopiować ten kod n razy, i kod byłby nieczytelny przez to, bo by dużo zajmował i ciężko by było się w nim połapać.

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