C语言——函数的递归

article/2025/9/12 4:19:22

 函数的声明和定义
 函数声明:
 1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,并不重要。
 2.函数的声明一般出现在函数的使用之前,要满足先声明后使用。
 3.函数的声明一般要放在头文件之中。(后缀为 .h)
 函数定义:
 函数的定义是指函数的具体实现,交代函数的功能实现。

函数的递归

什么是递归呢??
 程序调用自身的编程技巧称为递归(recursion),递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常
 把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复运算,大大减少了程序的代码量


 递归的主要思考方式在于:化繁为简。
 
 递归的两个必要条件
 1.存在限制条件,当满足这个限制条件的时候,递归便不再继续
 2.每次递归调用之后越来越接近这个限制条件。


举一个简单的例子,(递归这样写是错误的,会陷入死循环,但这也确实是一种递归,仅仅是为了举例)

练习
 接收一个整型值(无符号),按照顺序打印它的每一位,例如:输入1234,打印1 2 3 4 

  函数的递归必须满足两个条件,1,存在限制条件,当满足这个限制条件的时候,递归便不再继续,上图的n>9便是限制条件,2,每次递归调用之后越来越接近这个限制条件。上图的n/10便是使n 的值越来越接近9这个限制条件, 但是即使满足这两个条件也不是一定没问题,举个例子。

  这个时候便会报错 ,提示 stack overflow(栈溢出),因为每一次调用test函数栈区都要给它分配空间,而且上一次调用并没有结束,调用的次数太多,栈区的内存不够分配了,便会出现栈溢出的情况。



 所以,写递归代码的时候
 1,不能死递归,要有跳出条件,每次递归逼近跳出条件
 2,递归层次不能太深。

练习2

编写函数不允许创建临时变量,求字符串的长度

 练习 3

 计算n 的阶乘(不考虑溢出)

有一些功能,可以使用迭代的方式(循环)实现,也可以使用递归

练习 3

求第n 个斐波那契数列(不考虑溢出)

 但是这种方法效率太低了,因为套娃太多了,,,很多层,递归层次太深了,虽然没有导致栈溢出,但是效率很慢,比如算第50 个斐波那契数列,可能电脑要运行很长时间才能计算下来,下面是效率比较高的算法

 


http://chatgpt.dhexx.cn/article/20KmWf4L.shtml

相关文章

【C语言】函数递归详解

函数递归 1. 什么是函数递归2. 递归的两个必要条件2.1 练习1:打印一个数的每一位2.2 练习2:求字符串长度(strlen 模拟实现) 3. 递归与迭代3.1练习3:求 n 的阶乘(不考虑溢出)3.1.1 递归求 n 的阶…

C语言详解:函数递归专题

文章目录 函数递归函数递归的定义和优缺点递归的使用场景及必要条件递归的细节说明递归的习题讲解1打印整数每一位输入输出示例解题思路代码逻辑 2递归和非递归求n阶乘输入输出示例解题思路代码逻辑 3strlen函数模拟输入输出示例解题思路代码逻辑 4逆序字符串输入输出示例解题思…

2021-11-03

**"21天好习惯"第一期—12**1.递归函数(二) 程序在计算5的阶乘的时候,先执行递推,当n1或者n0的时候返回1,再回推将计算并返回。由此可以看出递归函数必须有结束条件。 递归函数特点: 1.每一级…

[C语言学习]----函数递归(超详细!!!)

本篇介绍的是C语言函数递归的详细知识 程序的艺术来源于生活 目录 7. 函数递归 7.1递归是什么 7.2 递归的两个必要条件 7.2.1练习1(详细讲解) 7.2.2练习2(详细讲解) 7.3 递归与迭代 7.3.1练习3(详细讲解&#xff…

五、需求分析建模之数据库建模

1. 了解E-R图在基于数据库的软件系统分析中的作用。 2. 复习并深化理解E-R图的相关概念。 3. 学习从实际应用问题中抽取E-R模型的方法。 4. 掌握简单ER图模型建模工具 E-R模型 Entity-Relationship Model E-R模型是一种数据建模的思想。 1. E-R模型的基本观点: 世…

数据库设计(1)—需求分析

2019独角兽企业重金招聘Python工程师标准>>> 需求分析是设计数据库的起点,需求分析结果是否准确反映用户的实际要求将直接影响到后面各阶段的设计,并影响到设计结果是否合理实用。 一、需求分析的任务 需求的任务是通过详细调查现实世界要处理…

SQL数据库设计(一)---需求分析与逻辑设计

今天先来介绍 数据库设计中的需求分析和逻辑设计(ER图)阶段,明天介绍物理设计与维护优化,数据库设计是非常有意思的:-) 数据库设计 根据系统业务的需要,结合我们所选用的DBMS,为这个业务系统构建出最优的数据存储模型。 并建立好数据库中的表…

数据库设计2————需求分析

需求分析任务 1、信息需求。明确数据库需要存储的数据,对这些数据将哪些梳理,同时还要描述数据间的联系。 2、处理需求。定义系统数据处理的操作功能,描述操作的优先次序。包括操作的执行频率和场合,操作与数据间的联系&#xff…

数据库设计(一) 需求分析

目前,大多数的应用系统都属于数据库应用程序,都离不开数据库的支持。数据库设计方案的优劣对于应用程序的运行至关重要。数据库设计过程就是针对具体的应用环境,设计优化的逻辑模式,并根据所采用的数据库系统设计物理结构&#xf…

三、数据需求与数据库设计

数据需求与数据库设计 数据需求 项目中主要包含了用户、权限(菜单)、角色三种类型的数据,各种数据包含的数据项如下: (1)用户:用户名、密码、生日、头像、简介、用户类型 (2&…

SQL数据库实战需求分析→数据库设计

从这开始,就真正进入项目实战啦。先说点体会,我刚开始接触编程的时候,都是编写一些小东西,往往都是半天或者一天什么的就编完了,那时候根本没想过做程序之前还要有需求分析。经过快两年的学习,接触的都是比…

数据库性能需求分析及评估模型

数据库作为应用系统当中最重要的一块,也是性能测试非常关注的一块,根据我自己的项目经验,和以往对应用系统的性能需求分析和测试策略制定过程,总结一下如何开展数据库系统的性能需求分析,以及制定数据库能力评估模型。…

互联网应用开发实践:需求分析与数据库设计

在本文中将分析一个用于新生开学分配寝室的“宿舍秒杀”系统。从用户故事开始探索需求,进而分析得到系统的主要功能和非功能性需求。最后,根据需求分析设计数据库,数据库的设计原则是尽可能的方便之后的需求拓展和修改。 用户故事 用户故事一…

数据库应用系统的需求分析

一 需求分析的概念与意义 所谓的需求分析,就是对待开发系统要做什么,完成什么功能的全面描述 软件的一些特性使得需求的获取常常并不容易! 比如软件功能复杂,需求可变性,软件的不可见性 二 获取需求的方法 面谈实地…

数据库设计:需求分析

设计一个性能良好的数据库系统,明确应用环境对系统的要求是首要的和基本的。因此,应该把对用户需求的收集和分析作为数据库设计的第一步。 需求分析的主要任务是通过详细调查要处理的对象,包括某个组织、某个部门、某个企业的业务管理等&…

数据库设计 | 需求分析

一、需求分析要干一个什么样的事情? 通过详细调查现实世界要处理的对象(组织、部门、企业等), 充分了解原系统(手工系统或计算机系统)工作概况, 明确用户的各种需求,然后在此基础上确…

数据库设计之需求分析

需求分析简单地说就是分析用户的需求。根据分析是设计数据库的起点,需求分析结果是否准确反映用户的实际要求将直接影响到后面各阶段的设计,并影响到设计结果是否合理和实用。 1. 需求分析的任务 需求分析的任务是通过详细调查现实世界要处理的对象(组…

数据库技术-数据库需求分析、数据流概念

目录 需求分析 数据流 结构化分析案例-教材销购案例 例题讲解 每文一语 需求分析 1、需求分析的概念与意义 需求是指用户对软件的功能和性能的要求,就是用户希望软件能做什么事情,完成什么样的功能,达到什么性能。 需求分析是在计算机…

matlab gui 教学,新手入门教程(一)文本框和按钮的使用

matlab gui 教学,新手入门教程(一)文本框和按钮的使用 一、新建文件二、添加控件 一、新建文件 1、在MATLAB命令行中输入guide。 2、回车,进入GUI的界面,选择新建GUI–Blank GUI(Default)–浏览(自定义存储…

零基础入门MATLAB(一篇十分钟)

目录 一、复数 二、取整函数 三、无穷量(Inf)和非数值量(NaN) 四、逻辑类型 五、字符和字符串 六、函数句柄 七、结构体 八、数组类型 九、单元数组 十、map容器类型 参考《MATLAB R2020a 完全自学一本通》 一、复数 …