// Sesión 2: provocar un stack overflow a propósito. Uso: overflow twos N, o overflow sum N
#include <stdio.h>
#include <string.h>

// Suma n, n - 2, n - 4... mientras sea positivo. Con n <= 0 devuelve 0.
// Tiene un error: encuéntrenlo con el informe.
static long long sum_by_twos(int n) {
    if (n == 0) {
        return 0;
    }
    return n + sum_by_twos(n - 2);
}

// Suma n, n - 1, n - 2... Es correcta: aquí lo que se acaba es la pila.
static long long sum_to(int n) {
    if (n <= 0) {
        return 0;
    }
    return n + sum_to(n - 1);
}

int main(int argc, char *argv[]) {
    int n;
    char extra;
    if (argc != 3 || sscanf(argv[2], "%d %c", &n, &extra) != 1) {
        fprintf(stderr, "uso: %s twos|sum N\n", argv[0]);
        return 1;
    }
    if (strcmp(argv[1], "twos") == 0) {
        printf("%lld\n", sum_by_twos(n));
    } else if (strcmp(argv[1], "sum") == 0) {
        printf("%lld\n", sum_to(n));
    } else {
        fprintf(stderr, "uso: %s twos|sum N\n", argv[0]);
        return 1;
    }
    return 0;
}
