#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 fib(int n, int indent) {
static int counter = 0;
counter++;
int count = counter;
if (n < 2) {
iprintf(indent, "%d. fib(%d) = %d\n", count, n, n);
return n;
}
iprintf(indent, "%d. fib(%d) = fib(%d) + fib(%d)\n", count, n, n-1, n-2);
int result = fib(n-1, indent+1) + fib(n-2, indent+1);
iprintf(indent, "%d. fib(%d) = %d\n", count, n, result);
return result;
}
int main(void) {
fib(7, 0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRhcmcuaD4KCi8vIFp3eWvFgnkgcHJpbnRmLCBhbGUgeiBvZHBvd2llZG5pbSB3Y2nEmWNpZW0uCnZvaWQgaXByaW50ZihpbnQgaW5kZW50LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgewogICAgdmFfbGlzdCBhcmdzOwoJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKCglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCAzKmluZGVudDsgaSsrKSB7CgkJcHV0Y2hhcignICcpOwoJfQoJdnByaW50Zihmb3JtYXQsIGFyZ3MpOwoKCXZhX2VuZChhcmdzKTsJCn0KCmludCBmaWIoaW50IG4sIGludCBpbmRlbnQpIHsKCXN0YXRpYyBpbnQgY291bnRlciA9IDA7Cgljb3VudGVyKys7CgkKCWludCBjb3VudCA9IGNvdW50ZXI7CgkKCWlmIChuIDwgMikgewoJCWlwcmludGYoaW5kZW50LCAiJWQuIGZpYiglZCkgPSAlZFxuIiwgY291bnQsIG4sIG4pOwoJCXJldHVybiBuOwoJfQoJCglpcHJpbnRmKGluZGVudCwgIiVkLiBmaWIoJWQpID0gZmliKCVkKSArIGZpYiglZClcbiIsIGNvdW50LCBuLCBuLTEsIG4tMik7CglpbnQgcmVzdWx0ID0gZmliKG4tMSwgaW5kZW50KzEpICsgZmliKG4tMiwgaW5kZW50KzEpOwoJaXByaW50ZihpbmRlbnQsICIlZC4gZmliKCVkKSA9ICVkXG4iLCBjb3VudCwgbiwgcmVzdWx0KTsKCQoJcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4odm9pZCkgewoJZmliKDcsIDApOwoJCglyZXR1cm4gMDsKfQo=