递归算法详解——递归算法的三要素以及例题分析
目录
- 1递归的三要素
- 1.1明确函数的功能
- 1.2递归的结束条件
- 1.3函数的等价关系
- 2递归案例
递归算法(英语:recursion algorithm)是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
1递归的三要素
递归的三要素
- 明确函数的功能
- 递归的结束条件
- 函数的等价关系
接下来利用nnn阶乘来讲解这三个条件
任何大于等于1 的自然数nnn阶乘表示方法:
n!=n×(n−1)!(n>1)0!=1(n=0)n!=n \times(n-1)! \quad (n > 1) \\ 0! = 1 \quad (n = 0) n!=n×(n−1)!(n>1)0!=1(n=0)
1.1明确函数的功能
明确我们要写的函数的功能是实现nnn的阶乘,定义函数如下:
// 定义n阶乘函数public int factorial(int n){}
1.2递归的结束条件
由阶乘的表示方法可以看出当n=0n = 0n=0时是阶乘的最小值,此时结束继续往下计算阶乘,可以把n=0n = 0n=0当做递归的结束条件。同样,当n=1n = 1n=1时,1!=11! = 11!=1也可以作为递归的结束条件。
// 定义n阶乘函数public Integer factorial(int n){// 递归的结束条件if (n == 1) return 1;}
1.3函数的等价关系
第三要素就是,我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。
由阶乘的表达式可以看出nnn的阶乘与n−1n -1n−1阶乘存在的关系式为n!=n×(n−1)!(n>1)n!=n \times(n-1)! \quad (n > 1)n!=n×(n−1)!(n>1)若已知n−1n -1n−1的阶乘,记为f(n−1)f(n - 1)f(n−1),则当前的nnn的阶乘可以记为f(n)=n×f(n−1)(n>1)f(n) = n \times f(n -1)\quad (n > 1)f(n)=n×f(n−1)(n>1)
综上递归的三个要素可以得出求nnn阶乘的递归函数为
// 定义n阶乘函数public Integer factorial(int n){// 递归的结束条件if (n == 1) return 1;return n * factorial(n - 1);}
2递归案例
更多的递归案例讲解点击此处.
递归算法详解——递归算法的三要素以及例题分析相关推荐
- php详解递归,PHP递归算法详解
本篇文章主要介绍PHP递归算法详解,感兴趣的朋友参考下,希望对大家有所帮助. 遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢?//曾经的 ...
- TCP端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口
参考文章:端口状态 LISTENING.ESTABLISHED.TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口
- python什么是可变参数_详解Python的三种可变参数
可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或 ...
- Unicode双向算法详解(bidi算法)(三)
Unicode双向算法详解(bidi算法)(三) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C++语法详解>一书相关章节的增补,以增强读者对 ...
- 《 Python List列表全实例详解系列(三)》——列表添加元素(4种方法)
< Python List列表全实例详解系列(三)> --列表添加元素(4种方法) 接上一篇:< Python List 列表全实例详解(二)>__访问列表元素(索引和切片)列 ...
- 详解二叉树的三种遍历方式(递归、迭代、Morris算法)
详解二叉树的三种遍历方式(递归.迭代.Morris算法) 最重要的事情写在前面:遍历顺序不一定就是操作顺序!!! 递归解法 首先,一颗二叉树它的递归序列是一定的,导致其前中后序不同的原因只不过是访问节 ...
- python中什么是可变参数_详解Python的三种可变参数
详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...
- Tensorflow 2.x源码详解之第三章:导数(梯度/GradientTape)
大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...
- oracle dg切换步骤,详解Oracle dg 三种模式切换
oracle dg 三大模式切换 =================================== 1 最大性能模式MAXIMUM PERFORMANCE ------默认模式 ===== ...
最新文章
- Linux笔记(更改权限chmod,更改所有组chown,umask,隐藏权限chattr)
- Microsoft加入量子计算的竞争
- golang 程序部署及Supervisord deamon 运行
- 3DSlicer8:FAQ-2
- java教程百度文库,成功拿到offer
- PyTorch数据Pipeline标准化代码模板
- 我的第一个MPI程序:利用矩形规则计算pi
- 分布式存储系统可靠性如何估算?
- 2018年10月底新公司
- Java游戏开发规则
- Stacked Hourglass Networks
- OpenShift 4 - 使用 Debezium 捕获变化数据,实现MySQL到PostgreSQL数据库同步(附视频)
- 加速安装pytorch
- hook C++类的虚表,替换成其他函数
- linux自动安装trojan客户端的shell脚本
- 智能指针shared_ptr、unique_ptr、weak_ptr
- c++中CreateEvent函数解析(2)
- aircrack-ng破解wifi密码
- 数学分析教程(科大)——2.2笔记+习题
- 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数