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

推荐订阅源

月光博客
月光博客
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
T
Tailwind CSS Blog
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
WordPress大学
WordPress大学
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
腾讯CDC
V
V2EX
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
M
MIT News - Artificial intelligence
宝玉的分享
宝玉的分享

洛屿的小站

脉冲线性加减速曲线的DDA实现 STM32F407 IAR环境下uC/OS-III移植完整指南 STM32 UCOS3+HAL库集成中的FPU HardFault问题 一种简单的卡尔曼滤波器设计 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语言学习相关
洛屿 · 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