『递归概念与典型实例』

简介: 在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递 归(Recursion)调用,这种函数称为递归函数 • 若p函数定义中调用p函数,称之为直接递归 • 若p函数定义中调用q函数,而q函数定义中又调用p函数,称之为间接递归


👨‍🎓作者简介:一位喜欢写作,计科专业的大二菜鸟

🏡个人主页:starry陆离

🌌上期文章:『算法导论』什么是算法?什么是程序?

📚订阅专栏:『算法笔记HNUCM-OJ』如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦


『递归概念与典型实例』

1.引言

1-100求和

方法1:使用循环求和 1+2+3+4+5+6+……+99+100

伪代码:

fori=1to100

  sum=sum+i

方法2:换个角度思考

sum(n)表示1…n的和

 

sum(100) =sum(99) +100  

 

=sum(98) +99+100  

 

=……  

 

=sum(1) +2+3+4+……+99+100  

 

=1+2+3+4+……+99+100

2.递归的定义

在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递 归(Recursion)调用,这种函数称为递归函数

  • 若p函数定义中调用p函数,称之为直接递归
  • 若p函数定义中调用q函数,而q函数定义中又调用p函数,称之为间接递归

3.递归的要素

1、递归表达式(递归方程)

2、递归结束条件(边界条件)

网络异常,图片无法展示
|

intsum(intn){

    if(n==1)return1;//递归结束条件

    elsesum(n-1)+n;//递归表达式

}

4.递归特点

(1) 需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的 求解方法与原问题完全相同,只是在数量规模上不同

(2) 递归调用的次数必须是有限的

(3) 必须有结束递归的条件来终止递归

5.递归的使用条件

(1) 定义是递归的(阶乘、斐波那契数列等)

(2) 数据结构是递归的(单链表、二叉树等)

(3) 问题的求解方法是递归的(汉诺塔、回溯法等)

6.递归的优缺点

递归的优缺点

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

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

解决方法:在某些递归算法中可消除递归调用,使其转化为非递归算法

7.典型递归实例

7.1求阶乘

n!=1×2×3×……×n

网络异常,图片无法展示
|

intf(intn){

    if(n==1)return1;//递归结束条件

    elsen*f(n-1);//递归表达式

}

7.2Fibonacci数列

斐波那契(Fibonacci)数列因数学家列奥纳多·斐波那 契以兔子繁殖为例引入,故又称为“兔子数列”

网络异常,图片无法展示
|

网络异常,图片无法展示
|

intfibonacci(intn){

    if(n<=1)return1;//递归结束条件

   returnfibonacci(n-1)+fibonacci(n-2);//递归表达式

}

7.3青蛙跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。

  • 求该青蛙跳上一个n级的台阶总共有多少种跳法?

就是fibonacci的变形题,读者可自行实现


相关文章
|
安全 数据安全/隐私保护 芯片
简单认识加扰与解扰
简单认识加扰与解扰
649 0
|
2月前
|
人工智能 Cloud Native Serverless
智驱未来,降本增效:2025阿里云双十一,企业数字化转型的终极引擎
一年一度的阿里云双十一全球狂欢季不仅是消费者的盛宴,更是企业实现技术升级与成本优化的黄金窗口。进入2025年,随着AI大模型、大数据分析的深度应用,企业对云计算的依赖性空前增强。阿里云作为亚太市场的领军者,其双十一大促已演变为一场为企业量身打造的“技术普惠”行动。本文将为您全面解析2025年阿里云双十一的独特优势、核心亮点及参与攻略,助您抢占先机
364 0
|
存储 Java 编译器
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
662 0
国家互联网信息办公室关于发布第十批深度合成服务算法备案信息的公告
2025年3月12日,国家网信办公布第十批深度合成算法备案信息,共395款算法通过公示。根据《互联网信息服务深度合成管理规定》,境内深度合成服务提供者和技术支持者需履行备案手续。具体信息可在中国互联网信息服务算法备案系统查询,疑议请发邮件至指定邮箱。附件含完整备案清单。
|
JavaScript 前端开发 测试技术
React和Vue的性能对比如何?
需要注意的是,性能不仅仅取决于框架本身,还与开发者的代码质量、架构设计以及项目的优化程度等密切相关。因此,在评估性能时,应该综合考虑多个因素,而不是仅仅局限于框架之间的比较。
711 58
|
5G UED
5G NR中的寻呼过程
【8月更文挑战第31天】
473 1
|
Linux 网络安全 API
企业微信自定义应用 企业可信IP配置 企业可信ip怎么设置
企业微信自定义应用 企业可信IP配置 企业可信ip怎么设置
javaOOP实现跳高大挑战!手把手教你实现小游戏!
javaOOP实现跳高大挑战!手把手教你实现小游戏!
159 2
javaOOP实现跳高大挑战!手把手教你实现小游戏!
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
285 0
|
机器学习/深度学习 计算机视觉 异构计算
深度学习在图像识别中的应用及其挑战
【5月更文挑战第27天】 随着人工智能技术的飞速发展,深度学习在图像识别领域取得了显著的成果。然而,尽管深度学习模型在图像识别任务上取得了很高的准确率,但仍然面临着诸多挑战,如数据不平衡、计算资源消耗大、模型泛化能力差等问题。本文将探讨深度学习在图像识别中的应用,分析其面临的挑战,并提出一些可能的解决方案。