#include <stdio.h>
#include <stdarg.h>
// Zwykły printf, ale z odpowiednim wcięciem.
void iprintf(int indent, const char *format, ...) {
va_list args;
int i;
for (i = 0; i < 3*indent; i++) {
}
}
int silnia(int n, int indent) {
if (n == 0) {
iprintf(indent, "silnia(0) = 1\n");
return 1;
}
iprintf(indent, "silnia(%d) = %d*silnia(%d)\n", n, n, n-1);
int result = n*silnia(n-1, indent+1);
iprintf(indent, "silnia(%d) = %d\n", n, result);
return result;
}
int main(void) {
silnia(10, 0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRhcmcuaD4KCi8vIFp3eWvFgnkgcHJpbnRmLCBhbGUgeiBvZHBvd2llZG5pbSB3Y2nEmWNpZW0uCnZvaWQgaXByaW50ZihpbnQgaW5kZW50LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgewogICAgdmFfbGlzdCBhcmdzOwoJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKCglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCAzKmluZGVudDsgaSsrKSB7CgkJcHV0Y2hhcignICcpOwoJfQoJdnByaW50Zihmb3JtYXQsIGFyZ3MpOwoKCXZhX2VuZChhcmdzKTsJCn0KCmludCBzaWxuaWEoaW50IG4sIGludCBpbmRlbnQpIHsKCWlmIChuID09IDApIHsKCQlpcHJpbnRmKGluZGVudCwgInNpbG5pYSgwKSA9IDFcbiIpOwoJCXJldHVybiAxOwoJfQoJCglpcHJpbnRmKGluZGVudCwgInNpbG5pYSglZCkgPSAlZCpzaWxuaWEoJWQpXG4iLCBuLCBuLCBuLTEpOwoJCglpbnQgcmVzdWx0ID0gbipzaWxuaWEobi0xLCBpbmRlbnQrMSk7CgkKCWlwcmludGYoaW5kZW50LCAic2lsbmlhKCVkKSA9ICVkXG4iLCBuLCByZXN1bHQpOwoJcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4odm9pZCkgewoJc2lsbmlhKDEwLCAwKTsKCQoJcmV0dXJuIDA7Cn0K