IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】函数(2) 函数声明和定义/函数递归 -> 正文阅读

[C++知识库]【C语言】函数(2) 函数声明和定义/函数递归

本篇内容

7.?函数的声明和定义

8.?函数递归

7.函数的声明和定义

7.1函数声明

1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
声明决定不了。
2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用
3. 函数的声明一般要放在头文件中的。
7.2函数定义
函数的定义是指函数的具体实现,交待函数的功能实现。
举个栗子

在工程上,函数声明一般被放在头文件中,函数实现一般放在同名的.c文件中。

调用时在所处文件开头输入#include?"xxx.h"即可

在同一文件下声明时,只需要将定义的第一行放在前面。即可。

为什么工程上要把声明和定义分模块写呢?

1.便于多人协作,每人只需要完成自己的模块。

2.便于分装和隐藏。

如何隐藏呢?

首先,打开函数实现的文件

右击蓝标那一行

点击属性

?

??将配置文件改为静态库,点击确定即可完成隐藏。

如要将代码租借,可只卖静态库加头文件。

静态库文件使用方法:

1.将静态库拖入工程文件夹中。

2.在需要调用的地方输入#pragma comment(lib,"xxx.lib")即可。

头文件为了避免重复调用,会用到两个代码

1.#pragma once

2.#ifndef __xxx__

#define __xxx__

..........

#endif

两者功能相同,推荐使用第一种,比较方便。

8.函数递归

8.1什么是函数递归

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

先来看一个简单的栗子

?这个任务要求打印1234的各位数字,就是要求它的每一位并打印,思考过程如下

?

?参考代码如下

是不是有点懵,套娃了属于是,话不多说,上图。

?相信大家已经对递归有了初步的认识,就是套娃,但是也不能一直套娃呀,所以函数递归必须满足下面的条件。

8.2函数递归的两个必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2 .每次递归调用之后越来越接近这个限制条件。
再来看一个栗子

?当你将n输入的很大时,就会出现错误

这种无限递归错误叫栈溢出Stack overflow。

系统分配给程序的栈空间是有限的,但是如果出现了死循环,或者(死递归),这样有可能导致一
直开辟栈空间,最终产生栈空间耗尽的情况,这样的现象我们称为栈溢出。

具体原理如下

下面给大家分享一个经典递归问题,斐波那契数列?

参考代码和详解如下

?如果要算第50个斐波那契数,所要计算的值就是上亿次了,又复杂又麻烦。

所以我们用迭代(循环)的方式试一试

?虽然代码复杂许多,但是计算大大减少。所以使用递归也得看时机。

什么时候用递归?

?那如何解决上述的问题:

1. 将递归改写成非递归。
2. 使用 static 对象替代 nonstatic 局部对象。在递归函数设计中,可以使用 static 对象替代 nonstatic
部对象(即栈对象),这不仅可以减少每次递归调用和返回时产生和释放 nonstatic 对象的开销,
而且 static 对象还可以保存递归调用的中间状态,并且可为各个调用层所访问。

再补充个小技巧:在写在递归函数中递归前的代码是顺序执行,写在递归之后的是倒叙进行。

再分享几个递归经典问题

1.汉诺塔问题

2.青蛙跳台问题

如果有时间,我也会分享关于这两个问题的文章。

随便说几句:

虽然递归看着代码简单,但是极度不好想呀!想着想着,头就成一团浆糊了,很难受,看来是代码思维还不够强,希望自己变得更强。

以上就是本次的分享内容了,喜欢我的分享的话,别忘了点赞加关注哟!

如果你对我的文章有任何看法,欢迎在下方评论留言或者私信我鸭!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 09:58:18  更:2021-09-26 09:59:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:01:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码