#include <stdio.h>
void f() {} // до С89
void g(void) {} // С89
int CalcFactorial(int n) {
if (n <= 0) {
return 1;
} else {
return CalcFactorial(n - 1) * n;
}
}
int CalcFibonacci(int n) {
if (n <= 1) {
return 1;
} else {
return CalcFibonacci(n - 1) +
CalcFibonacci(n - 2);
}
}
enum sequence_id {
FACTORIAL,
FIBONACCI
};
int (*SelectSequence(enum sequence_id id))(int) {
if (id == FACTORIAL) {
return CalcFactorial;
}
if (id == FIBONACCI) {
return CalcFibonacci;
}
return NULL; // сердито
}
int main() {
int n = SelectSequence(FACTORIAL)(5); // n == 120
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CnZvaWQgZigpIHt9IC8vINC00L4g0KE4OQoKdm9pZCBnKHZvaWQpIHt9IC8vINChODkKCmludCBDYWxjRmFjdG9yaWFsKGludCBuKSB7CiAgICBpZiAobiA8PSAwKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBDYWxjRmFjdG9yaWFsKG4gLSAxKSAqIG47CiAgICB9Cn0KCmludCBDYWxjRmlib25hY2NpKGludCBuKSB7CiAgICBpZiAobiA8PSAxKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBDYWxjRmlib25hY2NpKG4gLSAxKSArCiAgICAgICAgICAgICAgICAgICAgQ2FsY0ZpYm9uYWNjaShuIC0gMik7CiAgICB9Cn0KCmVudW0gc2VxdWVuY2VfaWQgewogICAgRkFDVE9SSUFMLAogICAgRklCT05BQ0NJCn07CgppbnQgKCpTZWxlY3RTZXF1ZW5jZShlbnVtIHNlcXVlbmNlX2lkIGlkKSkoaW50KSB7CiAgICBpZiAoaWQgPT0gRkFDVE9SSUFMKSB7CiAgICAgICAgcmV0dXJuIENhbGNGYWN0b3JpYWw7CiAgICB9CiAgICBpZiAoaWQgPT0gRklCT05BQ0NJKSB7CiAgICAgICAgcmV0dXJuIENhbGNGaWJvbmFjY2k7CiAgICB9CiAgICByZXR1cm4gTlVMTDsgLy8g0YHQtdGA0LTQuNGC0L4g74GMCn0KCmludCBtYWluKCkgewogICAgaW50IG4gPSBTZWxlY3RTZXF1ZW5jZShGQUNUT1JJQUwpKDUpOyAvLyBuID09IDEyMAogICAgcHJpbnRmKCJuID0gJWRcbiIsIG4pOwogICAgcmV0dXJuIDA7Cn0K