算法设计与分析之递归算法


前言

        递归算法真的是一座大山,想跨过它需要付出许多努力,这个过程中你可能想着放弃,当你有这个念头的时候,请咬牙坚持下去,因为当你翻越它之后将会欣赏到另一番风景。

在这里插入图片描述

一、递归算法概念

        直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。使用递归技术往往会使代码更简洁,使算法的描述更清晰且容易理解。

二、递归算法的设计步骤

1、分析并划分问题
        分析问题,将问题分解成若干个规模较小相互独立,但类型相同的子问题。需要注意的是各子问题的解必须能够组合成原始问题的一个完整答案。
2、设计递归函数
        根据步骤1问题分解的过程,设计出相应的递归函数。设计递归函数时需要注意它的两要素:边界条件和递归方程,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。
3、设计程序
        根据递归函数设计出解决问题的程序。

三、示例

        以下只给出题目,需要具体解析请查看文章递归整理及几个经典题目

1、求阶乘

        给定一个非负整数n,求它的阶乘n!。

2、斐波那契数列

        斐波那契数列的排列是:0,1,1,2,3,5,8,13,21,34,55,89,144……依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。

3、汉诺塔

        有三根杆子X,Y,Z。X杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至Y杆:
        1、每次只能移动一个圆盘;
        2、大盘不能叠在小盘上面。

4、排列问题

        输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

四、递归算法优缺点分析

1、优点

        结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

2、缺点

        递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

解决方法
        在递归算法中消除递归调用,使其转化为非递归算法。
        1、采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。
        2、用递推来实现递归函数。
        3、通过变换能将一些递归转化为尾递归, 从而迭代求出结果。后两种方法在时空复杂度上均有较大改善,但其适用范围有限。

小结

        对递归算法的介绍就到这里啦,希望这篇文章能给予你一些帮助,感谢各位人才的:点赞、收藏和评论,我们下次见。

在这里插入图片描述

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值