请问我编写的递归代码调用属于尾调用还是普通递归?
你的递归调用属于尾调用
先贴出你的代码:
void sum(const int values[], size_t count,int* result){ if(count <= 0) return; *result += values[0]; sum(values + 1,count - 1,result); }
你对尾调用的理解没错——尾调用就是函数的最后一个操作是调用另一个函数,且调用后没有任何需要执行的后续逻辑。
回到你的代码:当count > 0时,代码先执行*result += values[0]更新结果,之后就执行递归调用sum(values + 1, count - 1, result),这个调用是当前函数的最后一条执行语句,调用完成后当前函数直接结束,没有任何额外操作需要处理。完全符合尾调用的定义,所以这是尾调用,不是普通递归。
内容的提问来源于stack exchange,提问作者Роман Полоз
相关产品推荐
相关产品推荐

