[code:1]
/* Algoritam je rekurzivne prirode. Sushtina je sledeca:
Na prvom mestu u konkretnoj kombinaciji moze se naci svih n elemenata niza "brojevi". Taj prvi element kombinacije bira se u for petlji, pochev od nultog. Na sledecem mestu mogu biti svi oni koji u nizu "brojevi" imaju indeks veci od indeksa prethodno izabranog broja. Ovo nam govori parametar "pocetniIndeks". Ponovo izaberemo jedan, i tako dalje. Ovim osiguravamo da u nizu koji shtampamo nema ponavljanja jednih istih brojeva, i da nam se kombinacije ne ponavljaju.
Kada dubina rekurzije postane jednaka klasi kombinacije, shtampamo
kombinaciju.
*/
#include <iostream.h>
void Ucitaj(int&n, int&k, int* brojevi)
{
cout << "\nKoliko brojeva unosish?";
cin >> n;
for (int i=0; i<n; i++)
{
cout << "\n" << i+1 << ". broj:";
cin >> brojevi;
}
cout << "Unesi klasu kombinacije:";
cin >> k;
}
void Stampaj(int k, const int* indeksi, const int* brojevi)
{
cout << "\n";
for (int i=0; i<k; i++) cout << brojevi[indeksi]<< " ";
}
void Obradi(int dubinaRekurzije, int pocetniIndeks, int n, int k, int* indeksi, const int* brojevi)
{
for (int i=pocetniIndeks; i<n; i++)
{
indeksi[dubinaRekurzije]=i;
if (dubinaRekurzije<k-1)
Obradi(dubinaRekurzije+1, i+1, n, k, indeksi, brojevi);
else Stampaj(k, indeksi, brojevi);
}
}
void main()
{
int brojevi[10], indeksi[10];
int n, k;
Ucitaj(n, k, brojevi);
Obradi(0, 0, n, k, indeksi, brojevi);
}
[/code:1]