C语言必背100代码系列-第四篇:递归与算法
C语言必背100代码系列文章目录
第一篇:基础语法与入门必背代码
核心内容:Hello World、条件判断、循环结构、数组基础、函数定义等。
第二篇:数组与字符串操作
核心内容:数组排序、字符串处理、多维数组、字符匹配、内存拷贝等。
第三篇:指针与内存管理
核心内容:指针运算、动态内存分配、结构体指针、函数指针、内存泄漏检测等。
核心内容:阶乘递归、汉诺塔、分治算法、回溯算法、动态规划基础等。
第五篇:数据结构实现
核心内容:链表、栈、队列、二叉树、哈希表、图的基本操作。
第六篇:文件操作与IO
核心内容:文本文件读写、二进制文件操作、日志管理、CSV/JSON解析等。
第七篇:数学与算法进阶
核心内容:快速幂、素数测试、进制转换、矩阵运算、蒙特卡洛模拟等。
第八篇:系统编程与底层开发
核心内容:进程控制、线程同步、信号处理、套接字编程、系统调用封装等。
第九篇:网络编程进阶
核心内容:TCP/UDP通信、HTTP请求、WebSocket、SSL/TLS加密、网络抓包等。
第十篇:综合项目与工具
第四篇:递归与算法
想彻底掌握递归思维与核心算法?这篇硬核教程带你从零构建递归逻辑,破解经典算法难题!从阶乘到汉诺塔,从二分查找到快速排序,本文通过10个实战案例+动画级注释,深度解析递归三要素、栈溢出规避、时间复杂度优化等关键技术。每个案例直击痛点:目录遍历的递归陷阱、快速排序的分区策略、DFS迷宫求解……更有尾递归优化、迭代法转换等进阶方案。无论你是准备算法面试的求职者,还是想提升代码效率的开发者,这篇覆盖递归、搜索、排序等核心领域的干货合集,都能让你的算法功力实现质的飞跃!
1. 文本文件读写(fopen/fprintf/fscanf)
c
#include
int main() {
// 写入文件
FILE *writeFile = fopen(\"data.txt\", \"w\");
if (writeFile == NULL) {
perror(\"Failed to open file for writing\");
return 1;
}
fprintf(writeFile, \"Name: Alice\\nAge: 25\\nScore: 95.5\\n\");
fclose(writeFile);
// 读取文件
FILE *readFile = fopen(\"data.txt\", \"r\");
if (readFile == NULL) {
perror(\"Failed to open file for reading\");
return 1;
}
char line[100];
printf(\"File content:\\n\");
while (fgets(line, sizeof(line), readFile) != NULL) {
printf(\"%s\", line); // 输出:Name: Alice...
}
fclose(readFile);
return 0;
}
- 详细注释:
- \"w\":覆盖写入;\"r\":只读;\"a\":追加。
- fgets:逐行读取,避免缓冲区溢出。
- 应用场景:配置文件、日志记录。
- 常见问题:
- 文件未关闭导致数据丢失。
- 路径错误(建议使用绝对路径或检查返回值)。
2. 二进制文件读写(fwrite/fread)
c
#include
#include
typedef struct {
char name[50];
int age;
float score;
} Student;
int main() {
Student stu = {\"Bob\", 20, 88.5};
// 写入二进制文件
FILE *binFile = fopen(\"student.bin\", \"wb\");
if (binFile == NULL) {
perror(\"Failed to open binary file\");
return 1;
}
fwrite(&stu, sizeof(Student), 1, binFile);
fclose(binFile);
// 读取二进制文件
Student readStu;
FILE *readBin = fopen(\"student.bin\", \"rb\");
if (readBin == NULL) {
perror(\"Failed to open binary file for reading\");
return 1;
}
fread(&readStu, sizeof(Student), 1, readBin);
printf(\"Name: %s, Age: %d, Score: %.1f\\n\",