Jest jakiś inny sposób na zliczanie wywołań funkcji rekurencyjnej?

0

Witam
Mam taką funkcję rekurencyjną

int c(int x)
{
	static int ile = 0;
	if (x == 1)
	{
		++ile;
		return ile;
	}
	if (x % 2 == 0)
	{
		++ile;
		return c(0.5*x);
	}
	else
	{
		++ile;
		return c(3 * x + 1);
	}
}

zastanawiam się aby zliczać ilość jej wywołań da radę zrobić to inaczej nie licząc zmiennej globalnej.

1

Da radę, wystarczy do ile przypisać wartość zwracaną przez funkcję c powiększoną o 1:

int c(int x)
{
    int ile = 0;
    if (x == 1)
    {
        ++ile;
        return ile;
    }
    if (x % 2 == 0)
    {
        ile = c(0.5*x) + 1;
    }
    else
    {
        ile = c(3 * x + 1) + 1;
    }
}
1

Mała poprawka kodu pozwalająca prześledzić zmiany zmiennej ile:

int c(int x)
{
    int ile = 0;
    if (x == 1)
    {
        ++ile;
        return ile;
    }
    if (x % 2 == 0)
    {
        ile = c(0.5*x) + 1;
        cout << ile << endl;
        return ile;
    }
    else
    {
        ile = c(3 * x + 1) + 1;
        cout << ile << endl;
        return ile;
    }
}
0

@czaffik Wszystko fajnie, tylko... UB? Nie zwracasz żadnej wartości z funkcji, która ma zwracać wartość w przypadku gdy x != 1.

edit: Fuckin' ninja'd! :P Ta druga wersja już poprawna, ta pierwsza ciągle UB. :P

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