前面文章提到过递归算法,作了一些基础的介绍,举了几个比较简单的例子。
今天同样是递归问题,来给大家分享一下。
递归最常遇到的问题就是栈溢出,所以在函数递归时一定要有合适的终止条件。函数在每次递归时,每进行一次新的调用,都将创建一批变量,它们将掩盖递归函数前一次调用所创建的变量。
对于前一节讲到的用递归函数实现阶乘,其实并不是阶乘的很好的一个例子,很多人认为这种做法比较“高级”,实则不然,这种做法的效率对于用循环求阶乘没有任何优势,反而有些问题用阶乘来做会带来恐怖的效率之低 》__》 要明白:阶乘是函数的一次一次调用,每个函数的开启,参数必须压到堆栈中,为局部变量分配内存空间,寄存器的值必须保存等等,所有的递归均如此,所以简单的循环迭代可以解决的事,何必大开内存消耗呢??
如果你有所怀疑,你可以尝试一下用阶乘来求斐波那契数,斐波那契数就是以阶乘的形式定义的,那用阶乘来求有何不妥??把下面代码运行一下,计算第五十个斐波那契数,可以尝试一下用下面这个递归算法算出结果得多长时间 -_-
#include<s