递归哲学
阅读递归最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。如果你的每个步骤正确无误,你的限制条件设置正确,并且每次调用之后更接近限制条件,递归函数总是能够正确的完成任务。
感觉递归内部也隐含这一种哲学思想。因为按照一般的思维,只有过程正确,才能确保结果正确。但是在递归完成之前,过程还没有经过检验,那么结果就应该是不确定的。但是,只要我们相信最后结果是正确的,并用这个结果修正过程,那么最终结果它就是正确的。打个不恰当的比喻,两个思想就类似于唯物主义和唯心主义。用严谨的过程最后得到结果,就是唯物主义——客观因素的集合决定最后的发展结果。用结果反演过程,就是唯心主义——我希望得到这样的结果,最后就得到了这样的结果,我思故我在。
递归具体实现
递归必备因素
1、终止条件
2、递归过程
3、功能实现
终止条件描述的是递归最终的结束过程;递归过程就是根据具体的需求,不断逼近终止条件并引用递归函数。功能实现部分就是在递归过程中,所需要实现的具体功能。
递归的难点在于三部分的位置分布。
递归分类
尾部递归
/*
* 用递归方式计算n的阶乘
*/
long factorial(int n)
{
if(n<0)
return 1;
else
return n*factorial(n-1);
}
由于函数在递归调用返回之后不再执行任何任务,所以尾部递归可以很方便的转换为一个简单循环,完成相同的任务。
/*
* 用迭代方式计算n的阶乘
*/
long factorial(int n)
{
int result = 1;
while(n>1)
{
result *= n;
n -= 1;
}
return result;
}