Dziel i zwyc.[ile razy występuje podana liczba]

0

Jutrzejsze kolokwium zbliża się wielkimi krokami. Napotkałem mały problem. Przerobiłem większość przykładów z dziel i zwyc. jednak ten mnie totalnie zagiął a wydawał się taki prosty.

Program ma zliczać ile razy dana liczba wystąpiła w podanej tablicy, wykorzystując metodę dziel i zwyciężaj.

Niby wszystko ładnie i przy pewnych przykładach idzie super jednak w przypadku jak poniżej program wywala "5", a przecież dwójka powtórzyła się 4 razy. Co z tym zrobić?

c++:

#include <iostream>
#include <cstdlib>
using namespace std;
    int tab[10]={2,2,3,2,2,7,8,6,5,4};
    int liczba=0;    //ile razy liczba wsytąpiła(wiem, że oznaczenia są pomieszane)

int ile_dziel(int start, int stop, int ile)
{   
     if (start==stop) return tab[start];     
     int p=(start+stop)/2;                           //wyznaczanie indeksu połówki
     int i1=ile_dziel(start,p, ile);
     int i2=ile_dziel(p+1,stop, ile);
     if (i1==ile) liczba++;
     if (i2==ile) liczba++;   
     return liczba;   
}

int main()
{
        int ile;                       //jaką liczbę program ma szukać
    cout <<     ile_dziel(0,4,2);
        system("pause");
        return 0;       
}
0

Ale co ten kod niby robi? Przecież "ile" to jest jak rozumiem liczba której szukasz, więc czemu porównujesz ją z tym co zwróciła funkcja ile_dziel() skoro ona zwraca ci ilość wystąpień (powinna to zwracać...). WTF?
A te zmienne globalne to znów jakiś WTF.
Napisz to tak:

  • jeśli start=stop
    • jeśli aktualna liczba == ile to zwracasz 1
    • jeśli aktualna liczba != ile to zwracasz 0
  • jeśli start < stop to zwracasz sumę funkcji rekurencyjnej wywołanej na prawej i na lewej połówce
    I tyle.

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