递归算法

来源:互联网 发布:阿里云自定义监控 编辑:程序博客网 时间:2024/05/21 10:22

        如果一个函数或程序,直接或间接地定义或调用自身,称为递归。在调用函数fn1过程中又要调用fn1函数叫直接调用;在调用fn1过程中要调用fn2,而在调用fn2过程中又要调用fn1,这是间接调用。递归往往能给我们带来非常简洁非常直观的代码形势,从而使我们的编码大大简化,然而递归的思维确实很我们的常规思维相逆的,我们通常都是从上而下的思维问题, 而递归趋势从下往上的进行思维。这样我们就能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。事实上任何可以选择结构和重复结编写的程序都可以用递归来编写。

        递归算法解决问题的特点:   
1、递归就是方法里调用自身。   
2、在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。    
3、递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
4、在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

        递归至少要定义两个条件:一个跳出执行过程的出口和一个可以反复执行的递归过程。

#include <iostream>using namespace std;int RecursiveAlgorithm(const int i){  int iProduct;if((0 == i) || (1 == i))  //递归出口{return(1);}else{iProduct = i * RecursiveAlgorithm(i-1);//递归反复执行递归过程sum=n*(n-1)! }return iProduct;}int main(){  for (int i = 0;i < 10;i++)cout << i << "的阶乘值为:"<< RecursiveAlgorithm(i) << endl;system("pause");          return true;}


原创粉丝点击