复杂的尾部递归情况

Complicated tail recursion case

本文关键字:情况 递归 尾部 复杂      更新时间:2023-10-16

在这种情况下,编译器是否可以识别尾部递归?

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);之后是否有助于编译器将其识别为尾部递归情况?

一个识别尾部调用优化机会的编译器在特定用例中识别它应该没有问题。