Jak działa prosta funkcja

0

Witam może mi ktoś wyjaśnić jak to działa że wynikiem jest 2? Bo na logikę wynikiem powinno być 6... Napisałem to ale nie rozumiem jak to działa:/ Wejście to 11.

#include <iostream>

using namespace std;

int x;
int licz(int x)
{
    int w=0;
    if(x==1)
    {
        return 1;
    }
    else
    {
        w=licz(x/2);
        if(x%2==1)
        {
            return w+1;
        }
        else
        {
            return w-1;
        }
    }
}

int main()
{
    cin>>x;
    cout<<licz(x);
    return 0;
}
2
licz(11):
    x = 11
    w = licz(5)

licz(5):
    x = 5
    w = licz(2)

licz(2):
    x = 2
    w = licz(1)

licz(1):
    return 1

licz(2):
    x = 2
    w = licz(1) = 1
    return 1 - 1

licz(5):
    x = 5
    w = licz(2) = 0
    return 0 + 1

licz(11):
    x = 11
    w = licz(5) = 1
    return 1 + 1

stąd: licz(11) = 2

ew. w wersji z wcięciami:

licz(11):
    x = 11
    w = licz(5)

    licz(5):
        x = 5
        w = licz(2)

        licz(2):
            x = 2
            w = licz(1)

            licz(1):
                return 1

        ... return 1 - 1

    ... return 0 + 1

... return 1 + 1

stąd: licz(11) = 2

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