Rekurencyjny algorytm Flawiusza - program nie kończy działania

0

Próbowalem napisać algorytm rozwiązujący problem flawiusza poprzez rekurencje, niestety coś sie psuje w programie i podczas uruchomiania konsola sie zacina (rekurencja prawdopodobnie biegnie w nieskończoność), czy mógłby mi ktoś wskazać w czym tkwi problem?

#include <iostream>
using namespace std;

void f1(int count, int * tab, int alive)
{

    if ( tab[count % 40] != 0  && count % 3 == 0 ) 
        {
            tab[count % 40] = 0;                        
            alive--;
        }

    if ( alive > 2)
    {
        f1(count ++,tab,alive);
    }

}

int main()
{
    int * tab = new int[41];
    for (int i = 0; i < 41; i ++)
    {
        tab[i] = i + 1;
    }

    f1(0,tab,41);

    for (int i = 0; i < 41; i ++)
    {
        cout << tab[i] << " ";
    }

    system("pause");
    return 0;
0

Udało mi sie znaleźć błąd: inkrementacja w funkcji count++ nic nie dawała po zmianie na ++count lub inkrementacje poza funkcją program przestał sie crashować ale niepoprawny wynik mi wychodzi, jest ktoś w stanie wskazać jakieś błedy w algorytmie?

1

Używając postincrementacji nie zwiększa Ci się count. Cały czas jesteś na count = 1.
Poza tym narysuj sobie to na kartce i zauważysz, że tylko pierwsza 'kolejka' działa poprawnie. Następnie przechodzisz po martwych nie zabijając ich co prawda ponownie ale zliczając przez co kolejny obchód nie zabija już co 3 osobę.

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