C 编译器中的尾递归优化 尾递归优化通过用跳转替换递归函数调用来提高程序效率。令人惊讶的是,尽管它有明显的优点,但程序员经常质疑它是否在 C/C 编译器中实现。 现代编译器中的实现 与普遍看法相反,所有现代主流 C 编译器都执行 tail调用优化,包括相互递归调用。 编译器指令 要启用尾递归优化,只需激活编译器优化以提高速度: MSVC: /O2 或 /Ox GCC、Clang、ICC: -O3 检查优化状态 要验证编译器是否已执行优化,请使用以下方法之一: 执行将执行以下操作的调用否则会导致堆栈溢出。 检查程序集输出。 注意事项和注意事项 析构函数可能会干扰尾递归优化。 如果需要执行任何析构函数,则无法执行尾部调用通话后。