// El factorial con un rastro: cada nivel de la recursión escribe con más sangría.
#include <stdio.h>

static void indent(int depth) {
    for (int i = 0; i < depth; i++) {
        printf("  ");
    }
}

// depth solo sirve para la sangría: no interviene en la cuenta.
static long long factorial(int n, int depth) {
    indent(depth);
    printf("entra factorial(%d)\n", n);
    if (n <= 1) {
        indent(depth);
        printf("caso base: devuelve 1\n");
        return 1;
    }
    long long rest = factorial(n - 1, depth + 1);
    long long result = n * rest;
    indent(depth);
    printf("%d * %lld = %lld\n", n, rest, result);
    return result;
}

int main(void) {
    printf("resultado: %lld\n", factorial(4, 0));
    return 0;
}
