online: 7; azi: 730; total: 52736 Manual clasa a xi a - Tehnici de programare - Divide et impera

Manual clasa a Xi a

Tehnici de programare

Divide et impera

Sa se calculeze n!
Pentru a calcula n!, putem folosi algoritmul Divide et Impera . Algoritmul constă în împărțirea problemei în subprobleme mai mici, calcularea soluției pentru fiecare subproblemă și combinația soluțiilor pentru a obține soluția finală.
În cazul de față, putem împărți problema calculării lui n! în două subprobleme:
Putem apoi combina soluțiile pentru a obține soluția finală n!.
Pentru a implementa acest algoritm în C++, putem utiliza o funcție recursivă care primește n ca parametru și returnează n!.
# include < iostream >
using namespace std ;
int factorial ( int n) {
if (n == 0 || n == 1 ) {
return 1 ;
} else {
return n * factorial(n/ 2 ) * factorial(n - n/ 2 );
}
}
int main () {
int n = 5 ; // Exemplu: calculăm 5!
cout << n << "! = " << factorial(n) << endl ;
return 0 ;
}

n acest exemplu, am calculat 5! și am afișat rezultatul. În funcția factorial , verificăm dacă n este 0 sau 1, caz în care returnăm 1. În caz contrar, calculăm produsul dintre n și factorial(n/2) și factorial(n - n/2), care reprezintă soluția finală a problemei.
Acest algoritm are o complexitate temporală de O(log n), deoarece împărțim problema în jumătate la fiecare apel recursiv.