当前位置:网站首页>『递归』递归概念与典型实例
『递归』递归概念与典型实例
2022-08-05 04:56:00 【starry陆离】
活动地址:CSDN21天学习挑战赛
作者简介:一位喜欢写作,计科专业大二菜鸟
个人主页:starry陆离
首发日期:2022年8月2日星期二
上期文章:『算法导论』什么是算法?什么是程序?
订阅专栏:『算法分析与设计』
每日推荐:『牛客网-面试神器』
如果文章有帮到你的话记得点赞+收藏支持一下哦
1.引言
问题:1-100求和
方法1:使用循环求和 1+2+3+4+5+6+……+99+100
伪代码:
for i=1 to 100
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、递归结束条件 (边界条件)
int sum(int n){
if(n==1)return 1;//递归结束条件
else sum(n-1)+n;//递归表达式
}
4.递归特点
(1) 需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的 求解方法与原问题完全相同,只是在数量规模上不同
(2) 递归调用的次数必须是有限的
(3) 必须有结束递归的条件来终止递归
5.递归的适用范围
(1) 定义是递归的(阶乘、斐波那契数列等)
(2) 数据结构是递归的(单链表、二叉树等)
(3) 问题的求解方法是递归的(汉诺塔、回溯法等)
6.递归的优缺点
优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性, 因此它为设计算法、调试程序带来很大方便
缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空 间都比非递归算法要多
解决方法:在某些递归算法中可消除递归调用,使其转化为非递归算法
7.典型递归实例
7.1求阶乘
n!=1×2×3×……×n
int f(int n){
if(n==1)return 1;//递归结束条件
else n*f(n-1);//递归表达式
}
7.2Fibonacci数列
斐波那契(Fibonacci)数列因数学家列奥纳多·斐波那 契以兔子繁殖为例引入,故又称为**“兔子数列”**。
int fibonacci(int n){
if(n<=1)return 1;//递归结束条件
return fibonacci(n-1)+fibonacci(n-2);//递归表达式
}
7.3青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。
- 求该青蛙跳上一个n级的台阶总共有多少种跳法?
就是fibonacci
的变形题,读者可自行实现
如果文章有帮到你的话记得点赞+收藏支持一下哦
边栏推荐
- App快速开发建设心得:小程序+自定义插件的重要性
- 一篇博客通关Redis技术栈
- 作业8.4 进程间的通信 管道与信号
- 【 8.4 】 source code - [math] [calendar] [delete library 】 【 is not a simple sequence (Bonus) 】
- Flutter learning - the beginning
- Homework 8.4 Interprocess Communication Pipes and Signals
- [8.1] Code Source - [The Second Largest Number Sum] [Stone Game III] [Balanced Binary Tree]
- Flutter学习三-Flutter基本结构和原理
- AUTOCAD - dimension association
- 算法---一和零(Kotlin)
猜你喜欢
Homework 8.4 Interprocess Communication Pipes and Signals
Flutter 父子组件如何都能收到点击事件
Use IDEA to connect to TDengine server
概率论的学习和整理8: 几何分布和超几何分布
【转】什么是etcd
服务器磁盘阵列
作业8.4 进程间的通信 管道与信号
How to solve complex distribution and ledger problems?
There are a lot of 4T hard drives remaining, prompting "No space left on device" insufficient disk space
how to measure distance from point to face in creo
随机推荐
Develop your own node package
4T硬盘剩余很多提示“No space left on device“磁盘空间不足
Flutter Learning 4 - Basic UI Components
Error creating bean with name ‘configDataContextRefresher‘ defined in class path resource
LAB 信号量实现细节
bytebuffer 内部结构
【informix】解决启动报错大全,以及解决办法
1007 Climb Stairs (贪心 | C思维)
How to identify false evidence and evidence?
什么是ASEMI光伏二极管,光伏二极管的作用
[informix] Resolving startup errors and solutions
【无标题】
[MRCTF2020] Ezpop (detailed)
How does the Flutter TapGestureRecognizer work
Bytebuffer put flip compact clear method demonstration
Shell(4)条件控制语句
for..in和for..of的区别
LeetCode:1403. 非递增顺序的最小子序列【贪心】
服务器磁盘阵列
Application status of digital twin technology in power system