目录

  • 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递归案例

更多的递归案例讲解点击此处.

递归算法详解——递归算法的三要素以及例题分析相关推荐

  1. php详解递归,PHP递归算法详解

    本篇文章主要介绍PHP递归算法详解,感兴趣的朋友参考下,希望对大家有所帮助. 遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢?//曾经的 ...

  2. TCP端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

    参考文章:端口状态 LISTENING.ESTABLISHED.TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

  3. python什么是可变参数_详解Python的三种可变参数

    可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或 ...

  4. Unicode双向算法详解(bidi算法)(三)

    Unicode双向算法详解(bidi算法)(三) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C++语法详解>一书相关章节的增补,以增强读者对 ...

  5. 《 Python List列表全实例详解系列(三)》——列表添加元素(4种方法)

    < Python List列表全实例详解系列(三)> --列表添加元素(4种方法) 接上一篇:< Python List 列表全实例详解(二)>__访问列表元素(索引和切片)列 ...

  6. 详解二叉树的三种遍历方式(递归、迭代、Morris算法)

    详解二叉树的三种遍历方式(递归.迭代.Morris算法) 最重要的事情写在前面:遍历顺序不一定就是操作顺序!!! 递归解法 首先,一颗二叉树它的递归序列是一定的,导致其前中后序不同的原因只不过是访问节 ...

  7. python中什么是可变参数_详解Python的三种可变参数

    详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...

  8. Tensorflow 2.x源码详解之第三章:导数(梯度/GradientTape)

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  9. oracle dg切换步骤,详解Oracle dg 三种模式切换

    oracle dg 三大模式切换 =================================== 1  最大性能模式MAXIMUM PERFORMANCE   ------默认模式 ===== ...

最新文章

  1. Linux笔记(更改权限chmod,更改所有组chown,umask,隐藏权限chattr)
  2. Microsoft加入量子计算的竞争
  3. golang 程序部署及Supervisord deamon 运行
  4. 3DSlicer8:FAQ-2
  5. java教程百度文库,成功拿到offer
  6. PyTorch数据Pipeline标准化代码模板
  7. 我的第一个MPI程序:利用矩形规则计算pi
  8. 分布式存储系统可靠性如何估算?
  9. 2018年10月底新公司
  10. Java游戏开发规则
  11. Stacked Hourglass Networks
  12. OpenShift 4 - 使用 Debezium 捕获变化数据,实现MySQL到PostgreSQL数据库同步(附视频)
  13. 加速安装pytorch
  14. hook C++类的虚表,替换成其他函数
  15. linux自动安装trojan客户端的shell脚本
  16. 智能指针shared_ptr、unique_ptr、weak_ptr
  17. c++中CreateEvent函数解析(2)
  18. aircrack-ng破解wifi密码
  19. 数学分析教程(科大)——2.2笔记+习题
  20. 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数

热门文章

  1. 如何再html5中嵌入视频网站视频
  2. 图片如何转换为文字?这些软件可以实现
  3. Linux安装Erlang
  4. bal插口_调音台上的英文缩写都是什么意思 调音台上面那几个插口是什么作用...
  5. 关闭危险端口445的简单方法
  6. sql/hana批量存入表(每日一总)
  7. springboot 签名验证
  8. 【毕业设计】金融大数据分析与可视化 - python 大数据 金融 可视化
  9. 无线通信中比bit更小的“”数据单位”码片(也叫码元 ,chip) 什么是符号速率
  10. 美国TSCA 法案管控产品中的几种PBT化学品