求n的阶乘的算法框图_算法|从阶乘计算看递归算法
欢迎点击「算法与编程之美」↑关注我们!
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
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的阶乘的算法框图_算法|从阶乘计算看递归算法相关推荐
- 求n的阶乘的算法框图_算法——递归问题
要理解递归,首先要理解递归. 从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山...... 上面这些梗在递 ...
- python枚举算法流程图_算法-枚举
本章我们进入算法的学习,我们会通过比较经典的例题去讲解一些常用的算法思想,常用的算法思想包括:枚举.递归.分治.贪心.试探.动态迭代和模拟等,本节我们来学习一下枚举算法. 1. 枚举思想 枚举算法我们 ...
- python快速排序算法循环_算法:快速排序的Python实现
一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...
- 求n的阶乘的算法框图_单片机常用的14个C语言算法
问:怎么每天看到这种文章? 答:只需搜索公众号"51单片机学习网"免费关注 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项 ...
- 求n的阶乘的算法框图_阶乘也很有趣:从阶乘到伽玛函数到非整数的阶乘
阶乘运算(Factorial) 任何大于等于1 的自然数n 阶乘: 也即 下表给出了一些自然数的阶乘值: https://en.wikipedia.org/wiki/Factorial 100!是一个 ...
- 求n的阶乘的算法框图_递归算法是一种直接或者间接调用自身函数或者方法的算法...
http://blog.csdn.NET/wangjinyu501/article/details/8248492 原版 一.基本概念 递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递 ...
- 求n的阶乘的算法框图_当代程序员必备技能(算法)之:递归详解 - Java斗帝之路...
前言 递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它.在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法.它太基础太重要了,这也是为什么面试的时候,面试官 ...
- 求n的阶乘的算法框图_干货丨Python 递归算法指归-百知教育
1. 递归概述 递归( recursion)是一种编程技巧,某些情况下,甚至是无可替代的技巧.递归可以大幅简化代码,看起来非常简洁,但递归设计却非常抽象,不容易掌握.通常,我们都是自上而下的思考问题, ...
- 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)
作者:SovietPower✨ 链接:https://ac.nowcoder.com/discuss/186584 来源:牛客网 度数序列 对于无向图, 为每个点的度数.有 (每条边被计算两次).有偶 ...
最新文章
- 以佛像喷泉来探讨BCH物联网应用潜力
- Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
- GPGPU OpenCL 获取kernel函数编译信息
- 游戏推广中CPA,CPT和CPS是什么意思?
- 计算机怎么取消用户密码,怎么取消电脑开机密码界面
- FPGA Verilog语言常用语法
- Android - Bootloader? root原理?Recovery? SuperSU?Magisk?Xposed?ROM包?这都啥玩意?
- pyTest官方手册(Release 4.2)之蹩脚翻译(9)
- python打字测速_【pygame游戏编程】第四篇-----打字测速游戏
- 用ClickHouse在GitHub上数星星
- 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了
- NUL 与 NULL
- python plot如何保存图片_Matplotlib 保存图片、图画接口和显示中文的使用方法
- Hive 数据同步ClickHouse
- 关于修改ant table选中行的背景色
- brother printer 打印机 winform 小工具
- 当前已提供的各国NTP服务器列表
- 从0开始教你三天完成毕业设计-项目设计
- 许进教授计算机成果,许进,学者主页-中国科技论文在线
- 漫画:为什么C语言永不过时?
热门文章
- mysql删除员工_数据库删除职工信息
- java周期_java 周期时期计算
- java值栈_Struts2 中的值栈是什么?
- mysql数据库(1):连接与断开服务器
- idea的总部_雷普索尔- YPF总部
- python常用序列类型_Python基础-序列类型的常用方法
- java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
- mysql查询条件是小数 查不到6.28_28.mysql数据库之查询
- ubuntu的MySQL远程数据库连接问题查找
- Python操作读写txt文件