递归算法详解

目录

一、背景

二、递归算法的原理

2.1、原理

2.2、递归算法的特点

2.3、递归算法要求

三、递归算法的实现思路

四、递归算法代码示例

4.1、C语言中的递归

4.2、c++语言中的递归

4.3、JAVA写的递归调用

五、递归调用算法的经典应用

5.1、汉诺塔

5.2、计算阶乘

5.3、斐波那契数列

5.4、二叉树的前序遍历

六、递归调用总结

七、递归算法的应用场景


一、背景

        递归调用是一种特殊的嵌套调用,是某个函数调用自己,而不是另外一个函数。递归调用一种是解决方案,一种是逻辑思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。

 

        递归函数通常包含两个部分:基本情况(Base Case)和递归情况(Recursive Case)。基本情况是递归的终止条件,当满足这个条件时,函数将不再调用自身;递归情况则是函数调用自身来解决规模更小的子问题。

    递归调用就是在当前的函数中呼叫当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。

二、递归算法的原理

2.1、原理

        递归的核心原理是将一个复杂的问题分解为若干个规模更小但结构相同的子问题,通过不断地递归调用自身来解决这些子问题,最终将子问题的解组合起来得到原问题的解。递归过程可以看作是一个栈的操作,每次递归调用都会将当前的状态(包括参数、局部变量等)压入栈中,当遇到基本情况时开始从栈中弹出状态并返回结果。

2.2、递归算法的特点

  递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

  递归算法解决问题的特点:

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

2.3、递归算法要求

  递归算法所体现的“重复”一般有三个要求:

  •   一是每次调用在规模上都有所缩小(通常是减半);
  •   二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
  •   三是在问题的规模极小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值