惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
博客园 - 叶小钗
S
SegmentFault 最新的问题
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
L
Lohrmann on Cybersecurity
量子位
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
J
Java Code Geeks
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 三生石上(FineUI控件)
Attack and Defense Labs
Attack and Defense Labs
AI
AI
The Cloudflare Blog
T
Tailwind CSS Blog
S
Schneier on Security
爱范儿
爱范儿
PCI Perspectives
PCI Perspectives
Stack Overflow Blog
Stack Overflow Blog
S
Secure Thoughts
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
V2EX - 技术
V2EX - 技术
S
Securelist
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Help Net Security
Help Net Security
C
Cisco Blogs
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
K
Kaspersky official blog
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Simon Willison's Weblog
Simon Willison's Weblog

洛屿的小站

一种简单的卡尔曼滤波器设计 Cadence - 应律而动,落指成音 Zephyr - 聆风之息,为你而奏 不改一行插件代码,实现消息优先级与阻断 洛玖定时任务系统 在 butterfly 主题中添加首页点集动画(基于p2line项目) 你好,2026 stm32f4xx-ads1256驱动 stm32f4xx-ad9854并行驱动 主动式网站状态监测实现及其应用 右键菜单加入用Trae打开文件和文件夹 三角洲行动ID映射表 洛玖SDK说明 为网页文章开头添加原文连接 Hexo-Butterfly主题在主页添加GitHub贡献日历 Proteus中555定时器仿真问题 装饰器 洛玖开发日记 STS3032舵机获取力矩输出 kotlin网页前后端那些事 mspm0g3507-ad9850 奇怪的bug Paddle模型转PaddleLite 人工智能考核 构建一个yolov3网络 yolo和paddle模型常见输出参数 PaddleDetection 随便写的一些东西 实验室C语言第一次考核题目讲解及相关代码解读 C语言神经网络房价预测系统 C、C++数组,指针,指针数组,数组指针的区别 C、C++的大括号是必须的部分吗? C、C++预处理详解 C、C++其他关键字详解 C、C++存储类型关键字详解 C、C++控制语句关键字详解 C、C++数据类型关键字详解 C、C++关键字 C++药品管理系统 Bi-LSTM(Attention)的PyTorch实现 C语言实现波士顿房价预测 easy库的使用 edgeboardFZ3A相关问题 Predict.py的编写 Paddle环境搭建 百度Paddle模型训练 GMD09601-0.96OLED显示屏 【LeetCode 1617】统计子树中城市之间最大距离 STM32阵列按键 CH32(F10X F20X) 最短路 拓扑排序
C语言学习相关
洛屿 · 2023-03-12 · via 洛屿的小站

函数递归

函数递归,简单的理解就是,自己调用自己,直到遇到边界条件,停止递归

比如我们想实现一个阶乘函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int n = 5;//求n!  这里是5!

//不使用递归,一种可行的做法是这样
int ans = 1;
for (int i = 1; i <= n; i++) {
ans *= i;
}
printf("%d! = %d", n, ans);

//使用递归
int _n(int x) {
if (x == 0)return 1;
return x * _n(x - 1);
}
printf("%d! = %d", n, _n(n));
/*
对于 _n(5),我们拆分一下它自己调用自己的过程↓
_n(5)
5 * _n(4)
4 * _n(3)
3 * _n(2)
2 * _n(1)
1 * _n(0)
1
达到边界,返回值为:5*4*3*2*1*1的 结果 (是,结果,不是这个计算式)
*/

define和const的区别

define:

  • define 是一个预处理指令,通常在 C 和 C++ 这类编程语言中使用。
  • 它用于定义编译时常量,这意味着在编译程序之前就将其值固定下来。
  • define 通常用于创建符号常量(宏常量),例如:
    1
    #define MAX_VALUE 100
  • 这样的定义会在编译时进行文本替换,将所有出现 MAX_VALUE 的地方替换为 100没有变量类型或内存分配
1
2
3
4
5
6
7
8
9
#include <stdio.h>

#define MAX_VALUE 100

int main() {
int x = MAX_VALUE;
printf("x的值是: %d\n", x);
return 0;
}

在这个示例中,MAX_VALUE 被定义为 100,并且在 main 函数中将其赋值给变量 x。当编译此代码时,预处理器会将 MAX_VALUE 替换为 100,因此在编译后的代码中,int x = MAX_VALUE; 实际上变成了 int x = 100;。这样,编译后的程序中不再存在 MAX_VALUE 符号,而是直接包含了 100 的值。

const:

  • const 是一种变量修饰符,通常在多种编程语言中使用,包括 C++, C#, JavaScript 等。
  • 它用于创建不可变的量,也就是常量。
  • const 变量在运行时具有类型和内存分配,通常存储在内存中,但其值无法被修改。
  • 例如,在 C++ 中:
    1
    const int MAX_VALUE = 100;
  • 这样的定义创建了一个整数常量,不能在后续代码中修改 MAX_VALUE 的值。
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

const int MAX_VALUE = 100;

int main() {
int x = MAX_VALUE;
// 试图修改 MAX_VALUE,将导致编译错误
// MAX_VALUE = 200;
printf("x的值是: %d\n", x);
return 0;
}

在这个示例中,MAX_VALUE 被定义为整数常量 100,并且在 main 函数中将其赋值给变量 x

如果你尝试在后续代码中修改 MAX_VALUE 的值(例如,MAX_VALUE = 200;),编译器将报错,因为MAX_VALUE 被声明为const,这意味着它是不可修改的常量。

所以,使用const关键字可以确保变量的值在后续代码中不会被修改。


defineconst 的主要区别在于:

  • define 用于创建编译时常量,没有变量类型和内存分配,只是文本替换。
  • const 用于创建运行时常量,具有变量类型和内存分配,但其值无法被修改。

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 洛屿的小站

打赏

  • wechat

    wechat

  • alipay

    alipay