我的代码中的递归调用是尾调用还是只是普通的递归?
void sum(const int values[], size_t count,int* result){
if(count <= 0) return;
*result += values[0];
sum(values + 1,count - 1,result);
}
因为据我所知,尾调用是函数中最后一次调用时发生的递归。
如果调用后面没有代码,则为尾调用。
在 C 中,这需要以下之一:
void g( … );
void f( … ) {
…
g( … ); // Tail call.
}
void g( … );
void f( … ) {
…
g( … ); // Tail call.
return;
…
}
T g( … );
T f( … ) {
…
return g( … ); // Tail call.
…
}
它与递归无关,但它确实包含递归调用。
尾部调用很有趣,因为它们可以被消除。 C 既不强制也不禁止消除尾调用。这取决于编译器。