---------------  RECURSION -----------------------

int fun(int x, int y) {
    if (x == y) {
        return x;
    } else if (x < y) {
        return fun(x, y-x)+1;
    } else {
        return fun(x-y, y)+1;
    }
}

int main() {
    cout << fun(65,20);
}

----------------------- POLYMORPHISM ---------------------

class Super {
    virtual void foo() { cout << "A"; }
    void fee() {
cout << "B"; }
};

class SubA : public Super {
    virtual void foo() { cout << "C"; }
    void fee() {
cout << "D"; }
};

class SubB
: public Super {
    virtual void foo() { cout << "E"; }
    void fee() {
cout << "F"; }
};

int main() {
    SubA a;
    SubB b;
    Super *supers[2];
    supers[0] = &a;
    supers[1] = &b;

    supers[0]->foo();
    supers[0]->fee();
    supers[1]->foo();
    supers[1]->fee();
}

----------- LIST RECURSION ------------


class List {
private:
    Node* front;
public:

    int myFun(Node* front, boolean b) {
        if (front == 0)
            return 1;
        else if (b) {
            return front->data * myFun(front->next,!b);
        else
            return front->data + myFun(front->next,!b);
    }

    int myFun() {
        myFun(front,true);
    }
}

int main() {
    List list;  
    // suppose list is currently:  3 8 5 2
    cout << list.myFun();