尾递归
如果一个函数中所有的递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。
当递归调用是整个函数体系中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。
特点:在回归的过程中不用做任何操作,大多数的现代编译器会根据这备战特点自动生成优化的代码。
#include<stdio.h>
int facttail(int n, int a) {
if (n < 0)
return 0;
else if (n == 0)
return 1;
else if (n == 1)
return a;
else
return facttail(n - 1, n*a);
}
int main() {
int a;
int b = 1;
printf("请输入一个值:\n");
scanf("%d", &a);
int sum;
sum = facttail(a,b);
printf("这个值的阶乘结果是%d\n", sum);
system("pause");
}
最后思考一下,基本递归和尾递归为什么区分,一般现代化程序都考虑时间而不去考虑内存,那基本递归和尾递归求阶乘那种方法更快呢?