#include <iostream>
int fib1(int term, int val = 1, int prev = 0) {
if (term == 0) return prev;
if (term == 1) return val;
return fib1(term - 1, val + prev, val);
}
int fib2(int term, int val = 1, int prev = 0) {
if (term == 0) return prev;
return fib2(term - 1, val + prev, val);
}
int fib3(int term, int val = 1, int prev = 0) {
if (term == 1) return val;
return fib3(term - 1, val + prev, val);
}
int main() {
std::cout << "fib1: " << fib1(1) << ", " << fib1(2) << ", " << fib1(3) << ", " << fib1(4) << ", " << fib1(5) << std::endl;
std::cout << "fib2: " << fib2(1) << ", " << fib2(2) << ", " << fib2(3) << ", " << fib2(4) << ", " << fib2(5) << std::endl;
std::cout << "fib3: " << fib3(1) << ", " << fib3(2) << ", " << fib3(3) << ", " << fib3(4) << ", " << fib3(5) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IGZpYjEoaW50IHRlcm0sIGludCB2YWwgPSAxLCBpbnQgcHJldiA9IDApIHsKCWlmICh0ZXJtID09IDApIHJldHVybiBwcmV2OwoJaWYgKHRlcm0gPT0gMSkgcmV0dXJuIHZhbDsKCXJldHVybiBmaWIxKHRlcm0gLSAxLCB2YWwgKyBwcmV2LCB2YWwpOwp9CgppbnQgZmliMihpbnQgdGVybSwgaW50IHZhbCA9IDEsIGludCBwcmV2ID0gMCkgewoJaWYgKHRlcm0gPT0gMCkgcmV0dXJuIHByZXY7CglyZXR1cm4gZmliMih0ZXJtIC0gMSwgdmFsICsgcHJldiwgdmFsKTsKfQoKaW50IGZpYjMoaW50IHRlcm0sIGludCB2YWwgPSAxLCBpbnQgcHJldiA9IDApIHsKCWlmICh0ZXJtID09IDEpIHJldHVybiB2YWw7CglyZXR1cm4gZmliMyh0ZXJtIC0gMSwgdmFsICsgcHJldiwgdmFsKTsKfQoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgImZpYjE6ICIgPDwgZmliMSgxKSA8PCAiLCAiIDw8IGZpYjEoMikgPDwgIiwgIiA8PCBmaWIxKDMpIDw8ICIsICIgPDwgZmliMSg0KSA8PCAiLCAiIDw8IGZpYjEoNSkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJmaWIyOiAiIDw8IGZpYjIoMSkgPDwgIiwgIiA8PCBmaWIyKDIpIDw8ICIsICIgPDwgZmliMigzKSA8PCAiLCAiIDw8IGZpYjIoNCkgPDwgIiwgIiA8PCBmaWIyKDUpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiZmliMzogIiA8PCBmaWIzKDEpIDw8ICIsICIgPDwgZmliMygyKSA8PCAiLCAiIDw8IGZpYjMoMykgPDwgIiwgIiA8PCBmaWIzKDQpIDw8ICIsICIgPDwgZmliMyg1KSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==
fib1: 1, 1, 2, 3, 5
fib2: 1, 1, 2, 3, 5
fib3: 1, 1, 2, 3, 5