C中的尾递归

我试图编写递归函数,找到一个数的阶乘。

int factorial(int input,int *answer) { if ( input ==0 ) { return 0; } *answer = *answer * input; factorial(input -1, answer); } 

你会对这个function说些什么? 是尾递归吗?

在执行尾递归函数(特别是尾递归函数)时,除了具有更友好接口的另一个函数之外,还有一个辅助函数通常是有帮助的。 友好的接口函数实际上只是设置不太友好的函数的参数。

 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); } 

通过传递累加器值,您可以避免在从被调用函数返回时使用指针或执行任何计算,这使得函数真正地呈尾递归。

这是一个定义的链接: http : //phoenix.goucher.edu/~kelliher/cs23/feb21.html

“一个函数是尾递归的,如果它做的最后一件事就是进行递归调用。”

在你发布的代码中,函数做的最后一件事就是对它自己进行递归调用,所以通过这个定义,它是尾递归的。