我试图编写递归函数,找到一个数字的阶乘.
int factorial(int input,int *answer)
{
if ( input ==0 )
{
return 0;
}
*answer = *answer * input;
factorial(input -1, answer);
}
Run Code Online (Sandbox Code Playgroud)
你对这个功能有什么看法?是尾递归吗?
在执行尾递归函数(尤其是尾递归函数)时,除了具有更友好接口的另一个函数之外,还有一个辅助函数通常是有帮助的.友好的接口函数实际上只是设置不太友好的函数的参数.
static unsigned factorial_helper(unsigned input, unsigned acc) {
if (intput == 0) {
return acc;
}
return factorial_helper(input-1, acc * input);
}
unsigned factorial(int input) {
if (input < 0) {
do_something_bad();
}
return factorial_helper(input, 1);
}
Run Code Online (Sandbox Code Playgroud)
通过传递一个累加器值,你可以避免在从被调用函数返回时使用指针或进行任何计算,这使得函数真正地是尾递归的.