Сложный случай рекурсии хвоста

Возможно ли, чтобы компилятор распознал хвостовую рекурсию в таких случаях, как этот?

void f(int x) {
if (x == 1) {
/* do_1... */
}
else if (x == 2) {
/* do_2... */
}
else if (x == 3) { // here, we want do_2 and do_3; the order doesn't matter
/* do_3... */
f(2); // this should be tail recursive
}
else if (x == 4) {
/* do_4... */
}
}

Будет размещение return; после f(2); помочь компилятору распознать его как случай хвостовой рекурсии?

1

Решение

Компилятор, который распознает возможности для оптимизации хвостового вызова, не должен иметь проблем с распознаванием его в этом конкретном случае использования.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]