Рекурсия.По какой причине ответ всегда 0?
Учитесь писать красиво. Вместо нагромождения вложенных if/else используйте ранний выход из функции.
float power(float X, int N) {
    if (N == 0) {
        return 1;
    }
    if (N < 0) {
        return 1. / power(X, -N);
    }
    if (N % 2 == 0) {
        float b = power(X, N / 2);
        return b * b;
    }
    return X * power(X, N - 1);
}
Аккуратно расставьте отступы. У вас там логика if else напутана, и программа делает совсем не то, что бы вам хотелось. Кроме того, посмотрите внимательно на warning-и от компилятора (он точно скажет, что power иногда не возвращает никаких значений, хотя вам кажется, что return есть во всех ветках if else). Это как раз потому, что у вас скобки не так расставлены и else относится совсем не к тому if, как вы хотели бы.