递归的应用

递归是指函数/过程/子程序在运行过程中直接或间接的调用自身而产生的重入现象。

在定义一个过程或函数时出现调用本过程或本函数的成分,称为递归。若调用自身,称为直接递归。若过程

或函数p调用过程或函数q,而q又调用p,称为间接递归。

在以下三种情况下,需要用到递归的方法。

1. 定义是递归的

有些数学公式、数列、树等的定义是递归的。

2. 数据结构是递归的

比如单链表就是一种递归的数据结构。

3. 问题的求解方法是递归的

比如汉诺塔问题。


通常,一个递归模型是由递归出口和递归体两部分组成的。前者确定递归到何时结束;后者确定递归求解时

的递推关系。递归思路是把一个不能或不好直接分解的“大问题”转换为一个或几个“小问题”来解决,再

把这些“小问题”进一步分解为更小的“小问题”来解决,如此分解,直至每个“小问题”都可以直接解决

(此时分解到递归出口)。递归的分解不是随意的分解,递归分解要保证“大问题”和“小问题”相似,即

求解过程和环境都相似;并且有一个分解的终点。


递归算法的执行过程分为递推和回归两个阶段。在递推阶段,把较复杂的问题的求解(规模为n)推到比原问

题简单一些的问题(规模小于n)的求解。在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复

杂问题的解。

递归与非递归的转换:

递归算法有两个基本的特性:

一是对求解某些复杂问题,递归算法分析问题的方法十分有效;

二是递归算法的时间/空间效率通常比较差。

把递归算法转换为非递归算法有以下三种基本方法。

(1)通过分析,跳过分解过程,直接用循环结构的算法实现求值过程。

比如斐波那契数列递归算法的改写。

(2)用栈模拟系统的运行时,只保存必须保存的信息,从而用非递归算法替代递归算法直接使用栈保存中间

结果,从而将递归算法转化为非递归算法的过程。

(3) 利用栈保存参数,由于栈的后进先出的特性符合递归算法的执行过程,可以用非递归算法替代递归算法。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值