如何正确新手学递归(全面)

Hello大家好我是小亦,今天呢我来跟新手教一下如果正确学递归,如果这篇文章对你有用就点点关注或点点赞谢谢qwq,话不多说请看:

递归是编程c++中一种非常重要的概念,尤其对于新手来说,理解递归的原理和应用可以大大增强解题能力。递归函数是自我调用的函数,它在其定义中调用自身。递归通常用于解决那些可以分解为更小、更简单实例的问题。

1. 理解递归的基本概念

递归包含两个主要部分:

  • 基础情形(Base Case):这是递归结束的条件。没有基础情形,递归将无限进行下去,最终导致程序崩溃。
  • 递归步骤(Recursive Step):这是问题逐步接近基础情形的部分。

2. 基础情形和递归步骤

  • 基础情形:是递归算法的停止点。例如,在计算阶乘时,0的阶乘定义为1,所以当递归到0时停止。
  • 递归步骤:每一次递归调用都应该使问题更接近基础情形。例如,计算n的阶乘时,可以将其表达为n * (n-1)!,这样每次递归调用都会将n减1,直到达到基础情形。

3. 递归与迭代的对比

  • 递归:使用函数调用自身来重复执行代码。
  • 迭代:使用循环结构来重复执行代码。

递归解决方案通常更简洁,但可能效率不如迭代解决方案。递归涉及到大量的函数调用,这会占用调用栈空间,而迭代则没有这个问题。

4. 递归示例

阶乘计算

斐波那契数列

 

5. 递归的注意事项

  • 确保有基础情形:每个递归函数都应该有一个或多个基础情形,以避免无限递归。
  • 避免栈溢出:太多的递归层次可能会导致栈溢出。在C++中,可以通过增加栈大小来解决这个问题(例如使用命令ulimit -s 8192)。
  • 效率问题:递归可能涉及大量的函数调用开销,对于某些问题,迭代解决方案可能更高效。

6. 递归的实际应用

递归在解决复杂问题时非常有用,如:

  • 树和图的遍历:深度优先搜索(DFS)和广度优先搜索(BFS)。
  • 分治算法:归并排序、快速排序等。
  • 动态规划:斐波那契数列、最短路径问题等。
  • 8. 递归优化

  • 尾递归优化:尾递归是指递归调用是函数中的最后一个操作。某些编译器可以优化尾递归,避免增加新的栈帧。
  • 记忆化:存储递归函数的结果,避免重复计算相同的子问题。

以上呢是我所学的递归大概,如果还有漏洞,私信不缺,私信者会标明

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值