基础算法(十) --- 递归法

        递归法是一种直接或者间接地调用自身算法的过程。
        什么时候使用递归呢?一般而言,如果发现当前的问题,可以用一个跟它本身策略一样的一个子问题的结果来计算的时候。如果恰好在最后一步中,有一个明确的递归结束条件(称为递归出口)。那么,就是递归使用的时机到了。
        递归有时候并不太明显,函数可能被间接嵌套。用递归写的代码非常简洁,也非常容易理解。在有些嵌入式应用里,如果当前的硬件比较糟糕,函数的运行栈非常小的话,就要消递归,因为递归的嵌套容易导致函数栈的溢出。但是消递归后的代码,显得就比较乱了,完全没有递归代码的简洁。
        递归是一种比较好的解决问题的思路,尤其在操作树这样的数据结构的时候。
        Example 1:
        删除一棵树上的所有节点。大家可以这样思考,要删除顶节点,就要删除顶节点下的所有直接的子节点,而子节点同样需要删除它们自己的所有直接的子节点,直到当前的节点是叶子节点。这个就是一个非常典型的递归过程,递归函数则是:如果当前节点是叶子节点则删除自己,然后返回;反之则调用递归函数删除自己的子节点,然后删除自己,返回。
        Example 2:
        WINDOWS UI控件的消息传递机制。控件都实现了相同的事件处理接口,父控件需要根据子控件处理事件的结果来进行自己的一系列处理。递归思路为:在当前控件的事件处理函数中,如果当前的控件有子控件,则调用子控件的事件处理函数,然后根据返回值接着处理,完毕之后返回处理标记;反之则直接处理,返回处理标记。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值