// Sesión 2. Sin for, sin while y sin variables globales.
#include "counted.h"

long long power_slow(long long base, int n, long *calls) {
    *calls = *calls + 1;
    if (n == 0) {
        return 1;
    }
    return base * power_slow(base, n - 1, calls);
}

static long search_from(const int *a, size_t n, size_t i, int value, long *calls) {
    *calls = *calls + 1;
    if (i == n) {
        return -1;
    }
    if (a[i] == value) {
        return (long) i;
    }
    return search_from(a, n, i + 1, value, calls);
}

long linear_search(const int *a, size_t n, int value, long *calls) {
    return search_from(a, n, 0, value, calls);
}

// --- Por escribir. Lo que debe hacer cada una está en counted.h. ---

long long power_fast(long long base, int n, long *calls) {
    (void) base;
    (void) n;
    (void) calls;
    return 0;
}

// Busca en el rango [lo, hi): lo entra y hi no. Agreguen aquí su función auxiliar.
long binary_search(const int *a, size_t n, int value, long *calls) {
    (void) a;
    (void) n;
    (void) value;
    (void) calls;
    return -1;
}
