欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

1

理解递归

“程序设计是实践计算机思维的重要手段”。

程序设计的三种特征就是封装、继承和多态。而对于算法新手来说函数作为封装代码是最常见的,他既可以被内部函数调用也可以被其他程序调用。而这种调用自身的方式就称为递归。

举一个现实例子,照镜子时看到的自己就是递归。

递归算法在数学阶乘的计算中体现的淋漓尽致,阶乘是排列组合的结果,任何大于1的自然数n阶乘可以表示为:n!=1×2×3×……×n ,设得到的积是x,x就是n的阶乘。他的定义是

这个函数的实现必然是有规律的。通常来说,我们可以用循环的方式来解决,但循环设计会很复杂,加大了代码量。而仔细观察我们可以发现蕴含在定义中的递推原理,第二个数都是第一个数减1,一直到最后一个数为1,这说明阶乘计算的数都是比他小1的数的阶乘。还要注意的是,阶乘必须是在自然数的范围内,而对于特殊的自然数0,数学家规定为0!=1,所以0!=1!。

也正是因为0的特殊性,我们可以把阶乘按0与非0的标准来区分,也就得到以下表达式:

对于这个特殊的阶乘0!,我们称他为基例,也就是最小的且不需要计算求得的解。基例的重要性不言而喻,如果没有基例,就无法停止并推出递归。就像照镜子,如果没有本身的人就无法获得镜子里的影像。 所以这就得出了递归的两个特征:

(1)基例不需要递归

(2)递归式中必须有基例存在

2

阶乘计算

首先把阶乘当作一个普通的函数写出来,这里要运用到fact()函数,这个函数的意义就是把自身引用到函数内部中去。此时的基例就是0,代码如下

输出结果如下

3

字符串反转实例

算法最重要的是思维,有了递归的思想,字符串反转这个简单的实例也可以轻而易举的用递归算法来实现啦!

实现反转所运用到的函数就是reverse()函数。而这里的递归对象就是字符串,结合阶乘,将字符串分成两个部分,首字符和其他字符。代码如下:

点击运行后却发现报错了,这是为什么呢?

错误提示说:代码超过了最大递归深度1000层。这里的最大递归深度是程序为了防止递归无限错误而设计的。之前强调过基例的作用,而这里出现错误的原因就是因为没有基例。基例是最小的字符串概念,也就是“没有字符”,在这里不输入任何字符就可以了。

可以实现字符反转的代码如下:

4

总结

在递归算法中涉及到的知识点就是函数与代码复用的知识点。其实编程的目的就是减轻人类的负担,在程序设计的时候一定要多多思考,注意细节!

更多精彩文章:

答粉丝问|Python中模块导入方法的比较

如何下载付费音乐

从1到100求和学算法思维(六)

开发|关于微信小游戏开发的入门心得

JAVA|关于同步和异步的区别

Web|如何实现导航栏的默认,预览以及选中时的样式

 where2go 团队


微信号:算法与编程之美

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

求n的阶乘的算法框图_算法|从阶乘计算看递归算法相关推荐

  1. 求n的阶乘的算法框图_算法——递归问题

    要理解递归,首先要理解递归. 从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山...... 上面这些梗在递 ...

  2. python枚举算法流程图_算法-枚举

    本章我们进入算法的学习,我们会通过比较经典的例题去讲解一些常用的算法思想,常用的算法思想包括:枚举.递归.分治.贪心.试探.动态迭代和模拟等,本节我们来学习一下枚举算法. 1. 枚举思想 枚举算法我们 ...

  3. python快速排序算法循环_算法:快速排序的Python实现

    一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...

  4. 求n的阶乘的算法框图_单片机常用的14个C语言算法

    问:怎么每天看到这种文章? 答:只需搜索公众号"51单片机学习网"免费关注 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项 ...

  5. 求n的阶乘的算法框图_阶乘也很有趣:从阶乘到伽玛函数到非整数的阶乘

    阶乘运算(Factorial) 任何大于等于1 的自然数n 阶乘: 也即 下表给出了一些自然数的阶乘值: https://en.wikipedia.org/wiki/Factorial 100!是一个 ...

  6. 求n的阶乘的算法框图_递归算法是一种直接或者间接调用自身函数或者方法的算法...

    http://blog.csdn.NET/wangjinyu501/article/details/8248492 原版 一.基本概念 递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递 ...

  7. 求n的阶乘的算法框图_当代程序员必备技能(算法)之:递归详解 - Java斗帝之路...

    前言 递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它.在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法.它太基础太重要了,这也是为什么面试的时候,面试官 ...

  8. 求n的阶乘的算法框图_干货丨Python 递归算法指归-百知教育

    1. 递归概述 递归( recursion)是一种编程技巧,某些情况下,甚至是无可替代的技巧.递归可以大幅简化代码,看起来非常简洁,但递归设计却非常抽象,不容易掌握.通常,我们都是自上而下的思考问题, ...

  9. 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)

    作者:SovietPower✨ 链接:https://ac.nowcoder.com/discuss/186584 来源:牛客网 度数序列 对于无向图, 为每个点的度数.有 (每条边被计算两次).有偶 ...

最新文章

  1. 以佛像喷泉来探讨BCH物联网应用潜力
  2. Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
  3. GPGPU OpenCL 获取kernel函数编译信息
  4. 游戏推广中CPA,CPT和CPS是什么意思?
  5. 计算机怎么取消用户密码,怎么取消电脑开机密码界面
  6. FPGA Verilog语言常用语法
  7. Android - Bootloader? root原理?Recovery? SuperSU?Magisk?Xposed?ROM包?这都啥玩意?
  8. pyTest官方手册(Release 4.2)之蹩脚翻译(9)
  9. python打字测速_【pygame游戏编程】第四篇-----打字测速游戏
  10. 用ClickHouse在GitHub上数星星
  11. 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了
  12. NUL 与 NULL
  13. python plot如何保存图片_Matplotlib 保存图片、图画接口和显示中文的使用方法
  14. Hive 数据同步ClickHouse
  15. 关于修改ant table选中行的背景色
  16. brother printer 打印机 winform 小工具
  17. 当前已提供的各国NTP服务器列表
  18. 从0开始教你三天完成毕业设计-项目设计
  19. 许进教授计算机成果,许进,学者主页-中国科技论文在线
  20. 漫画:为什么C语言永不过时?

热门文章

  1. mysql删除员工_数据库删除职工信息
  2. java周期_java 周期时期计算
  3. java值栈_Struts2 中的值栈是什么?
  4. mysql数据库(1):连接与断开服务器
  5. idea的总部_雷普索尔- YPF总部
  6. python常用序列类型_Python基础-序列类型的常用方法
  7. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
  8. mysql查询条件是小数 查不到6.28_28.mysql数据库之查询
  9. ubuntu的MySQL远程数据库连接问题查找
  10. Python操作读写txt文件