#include <iostream>
using namespace std;
template<int X> int const num = X==1 ? 0 : 1 + num<X%2 ? X*3+1 : X/2>;
//template<int X> int const ccc = X==0 ? 0 : 1 + ccc<0>; // ошибка: константа ccc<0> явно определена через саму себя
template<int X> int const rec = X==0 ? 0 : 1 + rec<(X ? 0 : 0)>; // поэтому прибегнем к трюку, сделаем вид, что параметр вычисляется
template<int X> int const err = X==0 ? 0 : 1 + err<(X ? X : X)>;
template<int X> int constexpr eee = X==0 ? 0 : 1 + eee<(X ? X : X)>;
template<int X> int const inf = X==0 ? 0 : 1+inf<X-1>;
int n[num<27>];
int r[rec<10>];
//int e[err<10>]; // это не константа времени компиляции, а статическая переменная
//int e[eee<10>]; //
int main() {
cout << num<27> << endl; // 111
cout << rec<10> << endl; // 1 - честно вычислил рекурсию
cout << err<10> << endl; // 1 - особенности инициализации статической переменной
//cout << eee<10> << endl; // ошибка: зацикливание в constexpr
//cout << inf<10> << endl; // ошибка: исчерпание глубины рекурсии, inf<-899>
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8aW50IFg+IGludCBjb25zdCBudW0gPSBYPT0xID8gMCA6IDEgKyBudW08WCUyID8gWCozKzEgOiBYLzI+OwovL3RlbXBsYXRlPGludCBYPiBpbnQgY29uc3QgY2NjID0gWD09MCA/IDAgOiAxICsgY2NjPDA+OyAvLyDQvtGI0LjQsdC60LA6INC60L7QvdGB0YLQsNC90YLQsCBjY2M8MD4g0Y/QstC90L4g0L7Qv9GA0LXQtNC10LvQtdC90LAg0YfQtdGA0LXQtyDRgdCw0LzRgyDRgdC10LHRjwp0ZW1wbGF0ZTxpbnQgWD4gaW50IGNvbnN0IHJlYyA9IFg9PTAgPyAwIDogMSArIHJlYzwoWCA/IDAgOiAwKT47IC8vINC/0L7RjdGC0L7QvNGDINC/0YDQuNCx0LXQs9C90LXQvCDQuiDRgtGA0Y7QutGDLCDRgdC00LXQu9Cw0LXQvCDQstC40LQsINGH0YLQviDQv9Cw0YDQsNC80LXRgtGAINCy0YvRh9C40YHQu9GP0LXRgtGB0Y8KdGVtcGxhdGU8aW50IFg+IGludCBjb25zdCBlcnIgPSBYPT0wID8gMCA6IDEgKyBlcnI8KFggPyBYIDogWCk+OwoKdGVtcGxhdGU8aW50IFg+IGludCBjb25zdGV4cHIgZWVlID0gWD09MCA/IDAgOiAxICsgZWVlPChYID8gWCA6IFgpPjsKdGVtcGxhdGU8aW50IFg+IGludCBjb25zdCBpbmYgPSBYPT0wID8gMCA6IDEraW5mPFgtMT47CgppbnQgbltudW08Mjc+XTsKaW50IHJbcmVjPDEwPl07Ci8vaW50IGVbZXJyPDEwPl07IC8vINGN0YLQviDQvdC1INC60L7QvdGB0YLQsNC90YLQsCDQstGA0LXQvNC10L3QuCDQutC+0LzQv9C40LvRj9GG0LjQuCwg0LAg0YHRgtCw0YLQuNGH0LXRgdC60LDRjyDQv9C10YDQtdC80LXQvdC90LDRjwovL2ludCBlW2VlZTwxMD5dOyAvLyAKCmludCBtYWluKCkgewogIGNvdXQgPDwgbnVtPDI3PiA8PCBlbmRsOyAvLyAxMTEKICBjb3V0IDw8IHJlYzwxMD4gPDwgZW5kbDsgLy8gMSAtINGH0LXRgdGC0L3QviDQstGL0YfQuNGB0LvQuNC7INGA0LXQutGD0YDRgdC40Y4KICBjb3V0IDw8IGVycjwxMD4gPDwgZW5kbDsgLy8gMSAtINC+0YHQvtCx0LXQvdC90L7RgdGC0Lgg0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Lgg0YHRgtCw0YLQuNGH0LXRgdC60L7QuSDQv9C10YDQtdC80LXQvdC90L7QuQovL2NvdXQgPDwgZWVlPDEwPiA8PCBlbmRsOyAvLyDQvtGI0LjQsdC60LA6INC30LDRhtC40LrQu9C40LLQsNC90LjQtSDQsiBjb25zdGV4cHIKLy9jb3V0IDw8IGluZjwxMD4gPDwgZW5kbDsgLy8g0L7RiNC40LHQutCwOiDQuNGB0YfQtdGA0L/QsNC90LjQtSDQs9C70YPQsdC40L3RiyDRgNC10LrRg9GA0YHQuNC4LCBpbmY8LTg5OT4KfQo=