一、尾递归
使用递归方法时,采用尾递归可以复用同一个栈帧,极大地节省内存。“当递归调用是函数体中最后执行的语句,并且它的返回值不属于表达式的一部分时,这个递归就是尾递归。”
int factorial(int n, int result){
if(n==1){
return result;
}else{
return factorial(n-1,n*result);
}
}
最初的算法
int factorial(int n){
if(n==1){
return 1;
}else{
return n*factorial(n-1);
}
}
方法2的缺点就在于虽然n*factorial(n-1)也是递归,但是递归的结果处于一个表达式中,还要进行计算,所以就没法复用栈帧了,只能一层一层地调用下去。