递归算法的简单整理

递归:


一个算法调用自己来完成它的部分工作,在解决某些问题时,一个算法需要调用自身。如果一个算法直接调用自己或间接地调用自己,就称这个算法是递归的(Recursive)。根据调用方式的不同,它分为直接递归(Direct Recursion)和间接递归(Indirect Recursion)。
比如,在收看电视节目时,如果演播室中也有一台电视机播放的是与当前相同的节目,观众就会发现屏幕里的电视套有一层层的电视画面。这种现象类似于直接递归。
如果把两面镜子面对面摆放,便可从任意一面镜子里看到两面镜子无数个影像,这类似于间接递归。
一个递归算法必须有两个部分:初始部分(Base Case)和递归部分(Recursion Case)。初始部分只处理可以直接解决而不需要再次递归调用的简单输入。递归部分包含对算法的一次或多次递归调用,每一次的调用参数都在某种程度上比原始调用参数更接近初始情况。
函数的递归调用可以理解为:通过一系列的自身调用,达到某一终止条件后,再按照调用路线逐步返回。递归是程序设计中强有力的工具,有很多数学函数是以递归来定义的。

 

例如,最近项目中用到的一个无限级分类:

 

 
  
1 /// <summary>
2 /// 获取分类数据
3 /// </summary>
4 /// <param name="parentId"> 父级节点ID </param>
5 /// <param name="depath"> 递归深度 </param>
6   private void GetCategories( int parentId, int depath)
7 {
8 string prefix = string .Empty;
9 for ( int i = 0 ; i < depath; i ++ )
10 {
11 prefix += " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " ;
12 }
13 depath ++ ;
14 categories = new BLL.lookup_sort().GetList( " topid= " + parentId).Tables[ 0 ];
15 foreach (DataRow c in categories.Rows)
16 {
17 str.Append( " <tr align='center'> " );
18
19 str.AppendFormat( " <td>&nbsp;&nbsp;{0}</td> " , c[ " sortid " ]);
21 str.AppendFormat( " <td>&nbsp;&nbsp;{0}</td> " , c[ " topid " ]);
22 str.Append( " </tr> " );
25 this .GetCategories(Convert.ToInt32(c[ " sortid " ]), depath);
26 }
27 }

 

 

 

转载于:https://www.cnblogs.com/sjpl00/archive/2010/10/15/1851857.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值