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

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

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

1

理解递归

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

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

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

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

3e69f33bbd972e18af517e60b3fbf3af.png

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

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

e1d7d7d5e628adc5a2f3491fdb7d6d25.png

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

(1)基例不需要递归

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

2

阶乘计算

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

58ff56e39d1fc25e4d6412e05e6c91e1.png

输出结果如下

2d8b5c8c190fcc420246b0b252e0914f.png

3

字符串反转实例

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

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

393ad17acfbe883f672e5c928312df90.png点击运行后却发现报错了,这是为什么呢?3c28dd9f52cb10646f5398bf853867c4.png

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

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

f2466ab42da2cdbe62fff15ce261fc4a.png6e2d4a05882fe843f6a0c85b64ec954f.png

4

总结

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

更多精彩文章:

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

如何下载付费音乐

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

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

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

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

 where2go 团队


微信号:算法与编程之美          

c45097e772346c5f2897d885ceb4c4d7.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab画无量纲速度分布,麦克斯韦分布与概率论中典型分布的比较教学

大学物理和高中物理的衔接教学已经受到大学教师足够的重视和研究[1-3]。大学物理的数学基础是大学数学,特别是微积分和概率论。关于大学物理和大学数学课程的有效衔接和融汇教学国内也有初步的研究和实践[4-6]。本文笔者在河海大学多年的《大学物理》教学经历中明显感觉到学生对…

Python成长之路_装饰器

一、初入装饰器 1、首先呢我们有这么一段代码,这段代码假设是N个业务部门的函数 1 def f1(aaa): 2 print(我是F1业务) 3 if aaa f1: 4 return ok 5 6 def f2(aaa): 7 print(我是F2业务) 8 if aaa f2: 9 return ok 业务代码这里的…

python卸载_删除系统 Python 引发的惨案

这个案例告诉我们,千万不要动系统自带的 Python,Win系统除外文 | fanzhenyu 出处 | http://fanzhenyu.cn/由于无知,卸载 Ubuntu 自带的 python3 引发惨案,谨记,深刻反思。惨案由于实验需要使用 Python3.6 以上版本&…

php 删除特殊符号,利用PHP删除特殊符号

在编程的时候,不管你是偏向PHP等较为简单的编程,还是说想Java等更需要逻辑的强类型语言编程,都会或多或少地接触到对特殊符号的处理。特殊符号虽然显得不怎么起眼,但却极有可能会让程序实现不了初衷的目的运行效果。我们最常见到的…

gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客

注意,下文的原始的gbdt是以sklearn中的gbdt的实现为例子来阐述的,因为gbdt的改进版本有很多,为了叙述方便,使用这个最为人所知的实现来描述。你有自己用过别的模型然后调参之类的吗?能说一下基本的调参流程吗&#xff…

深入C#类的方法

构造函数 example1: static void Main(string [] args) {SE engineernew SE();engineer.Age25;enginner.Name"艾边成";//省略其他属性赋值操作Console.WriteLine(engineer.SayHi());} 我们知道要使用类的属性和方法,首先要对类进行实例化&…

在linux上处理base64加密和解密

http://snailwarrior.blog.51cto.com/680306/142472/ 2.从标准输入读取文件内容,base64编码并打印到标准输出 [rootlocalhost test]# base64snailwarriorc25haWx3YXJyaW9yCg 我是输入snailwarrior,回车,然后按CtrlD结束文件输入的。 3、对字符…

python3迭代器是什么,python3 迭代器

1. 想要了解 迭代器 ,需要先 知道什么是 可迭代对象。简单点说,可以直接作用于for循环的对象,称之为可迭代对象(Iterable)。1.png可迭代对象,一定实现了__iter__方法。isinstance內建函数,可以判断一个对象是否是某个类…

边缘检测robert原理_机器视觉尺寸检测基础

尺寸测量/边缘检测利用边缘检查的尺寸检查是图像传感器的最新应用趋势。图像传感器可以将检查对象在平面上表现出来,通过边缘检测,测算位置、宽度、角度等。下面将按照处理过程来介绍边缘检查的原理。理解原理有助于优化检查设置。除此之外,还将介绍一些…

linux 查杀php木马,linux上php木马、后门查杀总结

Web Server(Nginx为例)1、为防止跨站感染,要做虚拟主机目录隔离(我是直接利用fpm建立多个程序池达到隔离效果)2、上传目录、include类的库文件目录要禁止代码执行(Nginx正则过滤)3、path_info漏洞修正:if ($request_filename ~* (.*)\.php) {set $php_ur…

Telnet 爆破 kail_【UZI|SN输给DWG后,AD选手被爆破,弹幕刷了半小时Uzi】英雄联盟S10于10月31日终于正式落幕了_科技资讯...

『联盟玩科技摘要_UZI|SN输给DWG后,AD选手被爆破,弹幕刷了半小时Uzi』在SN输给了DWG之后,最大的背锅选手也出来了,AD选手huanfeng成为了这次的背锅选手,毕竟在最重要的第三把比赛中,huanfeng的EZ全程都没有…

20160205.CCPP体系详解(0015天)

程序片段(01):01.杨辉三角.c 内容概要:杨辉三角 #include <stdio.h> #include <stdlib.h>#define N 10//01.杨辉三角: // 1.图形转换:将标准杨辉三角采用标准数组进行模拟 // 2.确定标准数组的图形描述关系: // (1).数组当中第一列的所有元素以及正对角线的…

no.7_qzhai 开心版_开心宝贝GM版下载-开心宝贝GM版安卓下载

开心宝贝GM版是一款经典Q萌风格的仙侠冒险ARPG手游。游戏画面精致唯美&#xff0c;角色刻画活灵活现&#xff0c;动态特效表达细致&#xff0c;原创的剧情故事跌宕起伏&#xff0c;为玩家们奉上了一场殿堂级的视听双重盛宴。Q萌仙侠世界任你探索&#xff0c;快来九妖下载体验一…

魔力耳朵java工作,魔力耳朵

热爱教育、英语流利的小伙伴&#xff0c;小兔子邦妮在等你&#xff01;外教管理岗位职责&#xff1a;1. 协助北美外教的管理&#xff0c;协调外教上课时间&内容&#xff0c;对外教进行平台使用和教学大纲的培训&#xff0c;并在线监督外教上课效果&#xff0c;对突发情况进…

android ContentResolver详解

查询出来的cursor的初始位置是指向第一条记录的前一个位置的cursor.moveToFirst&#xff08;&#xff09;指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的&#xff0c;一般这样来用&a…

咋安装redhatlinux镜像在哪下载_Windows7正版系统安装教程

大家好&#xff0c;今天分享一篇来自装机吧官网(zhuangjiba.com)的图文教程。操作系统在整个计算机系统中具有承上启下的地位。但由于上网的操作系统鱼龙混杂的&#xff0c;很多朋友是不知道在哪下载Windows7正版系统的&#xff0c;所以贴心的小编就整理了这个Windows7正版系统…

termux php 出错,android上的终端——termux

前言在安卓也可以体验终端命令的快感&#xff0c;甚至还可以操作安卓基础硬件。基本命令termux支持apt软件管理和pkg软件管理&#xff0c;首次安装时&#xff0c;系统会默认给出pkg的安装及更新命令&#xff0c;对此不做过多赘述&#xff0c;用过linux的可以直接上手。更换国内…

Duanxx的图像处理学习: 透视变换(一)

当人用眼睛看事物的时候&#xff0c;会感觉到近处的东西是比远处的东西要大一些的&#xff0c;通俗的说&#xff0c;这就是透视。 总的来说。透视变换是将3D的世界转换到2D图像上的一种手段&#xff0c;人的视觉系统和摄像头视觉系统也是基于这一工作原理。 对透视变化的研究&a…

虚拟摄像头 安卓版_林俊杰 ft. M.E.,联同视效大厂数字王国加码虚拟偶像

原标题&#xff1a;林俊杰 ft. .&#xff0c;联同视效大厂数字王国加码虚拟偶像睽违三年,林俊杰携新专《幸存者如你》强势回归,一场「新歌首唱LIVE」在10月30日晚间如约而至。对虚拟科技情有独钟的林俊杰,从未错过每一次变身资深玩家的机会。此番线上视听盛宴的中途,一位「平行…

php获得对象的类型,php 类型(对象)提示

PHP面向对象&#xff1a;类型提示2010-07-06PHP是弱类型语言&#xff0c;向方法传递参数时候也不太区分类型。这样的使用会引起很多的问题&#xff0c;PHP开发者认为&#xff0c;这些问题应该是由代码书写者在书写代码时进行检验以避免。没有类型提示很危险下面的代码可能会出现…