当前位置: 首页 > wzjs >正文

网站建设 关于我们沧州黄骅市贴吧

网站建设 关于我们,沧州黄骅市贴吧,wordpress keywords 插件,网站的后台系统怎么进入目录 函数和类型 阶乘 █递归函数调用 函数中可以调用和该函数自身完全相同的函数,这样的调用方式称为递归函数调用,下面我们就来学习相关的基础知识。 函数和类型 所谓递归(recursive),就是将自己包含在内&#x…

目录

函数和类型

阶乘

█递归函数调用


函数中可以调用和该函数自身完全相同的函数,这样的调用方式称为递归函数调用,下面我们就来学习相关的基础知识。


函数和类型

所谓递归(recursive),就是将自己包含在内,或者用自己来定义自己。

我们用下面的图来说明:(ps:引用知乎@是花花吖图片)

显示器里面套着一个又一个显示器

通过采用递归的思考方式,从1开始无限延续的自然数1、2、3……就可以像下面这样使用有限的方式定义出来:

█自然数的定义

a 1是自然数

b 某个自然数后面的整数也是自然数

通过使用递归定义,无限存在的自然数就可以通过两个语句定义出来,不仅仅是定义,通过有效利用递归还可以使程序更加整洁。


阶乘

递归的另一个例子,就是求非负整数的阶乘。对于非负整数n的阶乘,可以采用如下方式进行定义:

█阶乘n!的定义(n为非负整数)

a 0!= 1

b 若n > 0,则n!= n*(n-1)!

例如,5的阶乘5!可以通过5*4!求得,而4的阶乘4!可以通过4*3!求得一直到1!= 1*0!,根据定义0!= 1

我们用程序来实现,如下:

#include<stdio.h>/*返回阶乘的值*/
int factorial(int n)
{if(n > 0)return n * factorial(n - 1);elsereturn 1;
}
int main()
{int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘是%d\n", num, factorial(num));return 0;
}

只要形参接收的值大于0,函数factorical就会返回到n * factorial(n - 1),否则,返回到1.

看起来虽然很简单,但在程序执行时是十分复杂的,下面让我们来看看是如何执行的:


递归函数调用

我们以求3的阶乘为例,看看函数factorical求阶乘的流程:

a   通过factorical(3)调用函数函数factorical,因此形参n会被传入3,所以该函数返回3*factorical(2),但是要知道函数factorical(2)的值,就必须以2为参数再次调用函数函数factorical。

b   被调用的函数函数factorical,将2传入形参n中,该函数返回2*factorical(1),想知道函数factorical(1),的值就必须以1为参数再次调用函数factorical


c    被调用的函数factorical,将1传入形参n中,为了进行1*factorical(0)的运算,调用函数函数factorical(0)


d     因为形参n接受到的值为0,所以函数factorical返回1

 大家参照下面的流程图来对应上面每一个步骤:(红色箭头是参数,黄色箭头是返回值)

接下来是递归:大家可以从下面中仔细考虑下体现出的递归意义

c  收到返回值1的函数factorical,返回1*factorical(0),即1*1

b  收到返回值2的函数factorical,返回2*factorical(1),即2*1

d  收到返回值3的函数factorical,返回3*factorical(2),即3*2

为了求得n-1的阶乘,函数factorical调用函数factorical,像这样的函数调用称为递归函数调用

递归函数调用与其说时调用函数本身,倒不如理解为调用和该函数同样的函数更加自然,如果是调用函数本身,则会一直调用下去,进入死循环。

 如果待处理的问题、函数或者数据结构已经具有递归定义,就可以使用递归算法。使用递归的方式求阶乘是为了大家能够更好地理解,但并不合适。

http://www.dtcms.com/wzjs/543952.html

相关文章:

  • 中国建设官方网站python 网站开发 案例
  • 宁波网站建设在哪里周到的网站建设
  • 济宁做公司网站凡科做网站类型应该做哪个
  • 做ag视频大全网站可以下载的建站网站
  • 主机屋做淘宝客网站大学生网站建设规划书
  • 网站建设的公司做销售建盏十大高端客户
  • 网站一年要多少钱湛江网站建设方案外包
  • 没有网站怎样做外贸广告宣传片
  • 上海网站建设高端定制北京代理网站备案
  • 苏州网站制作公司安全平台
  • 山西营销网站建设设计前端开发工作内容
  • 免费开源建站教学网站公司网站招聘费如何做会计分录
  • 企业网站设计怎么做文山做网站
  • 做网站要钱的吗谷歌广告推广
  • 高端网站专业的网站开发服务
  • 个人网站制作申请石龙镇住房规划建设局网站
  • 建设网站应该怎么做vip影视网站怎么做的
  • 山东省住房与城乡建设厅网站酒店平台网站建设
  • 东莞网站开发技术公司电话网站怎么投放广告
  • 建设网站需要做哪些工作内容桐乡市城市规划建设局网站
  • 网站建设教程免费信用泰安网站
  • mc建筑网站手机网站asp
  • 张槎建网站网站开发合同注意事项
  • 网站营销有哪些潍坊专业做网站
  • 国外美容院网站微信开发文档小程序
  • 郑州做营销型网站设计电子商务网站建设方案
  • 合肥做网站优化温州 做网站
  • 怎么自己做淘宝网站wordpress vip 评论
  • 哈尔滨服务好的建站方案wordpress中文版开发文档
  • 网页和网站做哪个好用西安三大品牌设计公司