递归的一个小练习,直接上代码,没什么技术含量,关于尾递归的话,是一种编译器优化的方式,原理本人也不懂,感兴趣可以自行搜索,总之就是尾递归要比递归节省好多空间,只需两个递归函数的空间即可。
/* 2.递归与分治 阶乘函数*/#include <stdio.h>int factorial(int n){ if(n==0) return 1; else return n*factorial(n-1);}//递归 int factorial2(int n, int m){ if(n==0) return m; else { m *= n; } return factorial2(n-1,m);}//尾递归 int factorial3(int n){ int i,result = 1; for(i = n; i > 0; i--) result *= i; return result;}//非递归 int main() { int n; scanf("%d", &n); printf("%dn", factorial(n)); printf("%dn", factorial2(n, 1)); printf("%dn", factorial3(n)); return 0;}