递归调用在单片机中的应用
void InOrder(BinTree root) { if (root NULL)// 递归出口 return; InOrder(root-lchild); // 自己调用自己处理左子树 printf(%d , root-data); InOrder(root- rchild); // 自己调用自己处理右子树 }递归的两个必备条件这里全部具备递归终止条件基线条件if(root NULL) return;当走到空节点时直接返回不再继续调用防止无限循环死递归、栈溢出。递推公式自己调用自己缩小问题规模整棵树的中序遍历 左子树中序遍历 打印根 右子树中序遍历 把 “遍历整棵大树” 拆成 “遍历更小的左、右小树”。一、根本原理递归使用的是「系统栈栈帧」递归遍历c运行void InOrder(BinTree root) { if (root NULL) return; InOrder(root-lchild); printf(%d , root-data); InOrder(root-rchild); }每一次InOrder()自调用单片机都会在全局栈 Stack里分配一块栈帧保存形参root指针函数返回地址函数内部临时变量printf 缓存、寄存器备份栈的致命限制单片机特性PC 电脑栈通常几 MB单片机栈极小常见 STM32、8051 默认栈只有512 字节 / 1KB / 2KB。 栈空间是启动文件预先固定分配不能动态扩容。二、二叉树深度决定栈占用不是节点总数栈消耗只和树的深度有关和总节点数量无关平衡完全二叉树深度很小比如 1000 个节点深度≈10递归完全安全单边斜树最坏场景所有节点只有左孩子退化成单链表plaintext1 / 2 / 3 / 4 ... / 100此时递归深度 100每一层都压栈栈帧层层叠加很快占满栈内存直接硬崩溃。举个量化例子STM32假设一次InOrder栈帧占用 20 字节栈总大小 1KB1024B 最大安全递归深度 ≈ 1024 / 20 50 层。 如果二叉树深度超过 50直接栈溢出程序跑飞、死机、HardFault 硬件错误。三、单片机中两种解决方案工程必用方案 1改用非递归遍历手动堆模拟栈推荐量产使用自己用数组 / 堆内存手动实现栈不占用系统栈深度随便多大都不怕。 中序非递归代码单片机可直接用c运行#define MAX_TREE_DEPTH 200 void InOrder_NoRecursion(BinTree root) { BinTreeNode* stack[MAX_TREE_DEPTH]; // 手动栈放全局/堆不占函数栈 int top 0; BinTreeNode* cur root; while (cur ! NULL || top 0) { // 一路往左压节点 while (cur ! NULL) { stack[top] cur; cur cur-lchild; } // 弹出访问 cur stack[--top]; printf(%d , cur-data); // 切换右子树 cur cur-rchild; } }优势stack数组定义为全局变量存在.bss 段完全不消耗系统栈容量自己定义 200/500深度再大也不会溢出无递归调用无栈帧叠加嵌入式稳定。方案 2加大单片机栈容量临时折中不推荐长期STM32修改启动文件startup_stm32xxxx.sasmStack_Size EQU 0x0400 ; 原0x200(512字节)改成1024字节Keil C51 8 位单片机修改栈大小编译选项 缺陷RAM 资源宝贵加大栈会挤占全局变量、缓冲区内存遇到深度极大的斜树依然有溢出风险治标不治本。四、补充单片机开发规范深度不确定的树、链表、递归逻辑一律禁止用递归递归只允许用于固定极小深度场景深度 10所有深度不可控的遍历二叉树、深度优先搜索 DFS强制手动栈 / 队列迭代实现栈溢出故障极难调试无报错、随机死机、硬件异常中断。极简总结递归二叉树遍历深度越大栈占用越高单边链式二叉树会让递归深度等于节点数单片机小栈必然溢出单片机正式项目必须替换为非递归迭代写法用全局数组手动模拟栈规避栈溢出。

相关新闻

iOS审核被拒:二进制包残留第三方支付SDK——你的App里藏着定时炸弹

iOS审核被拒:二进制包残留第三方支付SDK——你的App里藏着定时炸弹

上一期我们聊了3.1.1,核心结论是“虚拟商品必须走IAP”。但3.1.1里有一个极其隐蔽、极其容易踩的细分坑,值得单独用一期来拆解——你根本没调用支付宝/微信支付,但你的二进制包里还躺着它们的SDK,然后被苹果扫出来,直接…

2026/6/26 23:03:44阅读更多 →
现在不升级IDEA 2024.2,你将错过3个重构加速器和2个AI辅助漏洞扫描器

现在不升级IDEA 2024.2,你将错过3个重构加速器和2个AI辅助漏洞扫描器

更多请点击: https://codechina.net 第一章:IDEA 优缺点分析 IntelliJ IDEA 作为 JetBrains 推出的旗舰级 Java 集成开发环境,凭借其智能代码补全、深度框架支持与高度可定制性,在企业级开发中占据重要地位。然而,其设…

2026/6/26 23:03:44阅读更多 →
想在深圳开发小程序,当地口碑好的技术开发公司有哪些?

想在深圳开发小程序,当地口碑好的技术开发公司有哪些?

前两周帮深圳开工厂的发小找小程序开发,他咬死了就要找深圳本地的,说异地沟通肯定不靠谱,结果花了7万找了家网红工作室,3个月改了4版,连最基本的在线报价功能都做不对,最后人家直接摆烂,钱要不回…

2026/6/26 23:03:44阅读更多 →
【紧急预警】IntelliJ IDEA 2024新版已悄然变更Spring Boot项目默认配置!3类高危兼容性风险正在爆发,立即自查这4个关键节点

【紧急预警】IntelliJ IDEA 2024新版已悄然变更Spring Boot项目默认配置!3类高危兼容性风险正在爆发,立即自查这4个关键节点

更多请点击: https://kaifayun.com 第一章:IntelliJ IDEA 2024新版Spring Boot项目创建机制重大变更概览 IntelliJ IDEA 2024.1 起彻底重构了 Spring Boot 项目初始化流程,弃用旧版基于 Spring Initializr Web API 的向导式表单,…

2026/6/27 0:39:09阅读更多 →
内存清理工具合集!大小不到1M的软件,让Windows瞬间丝滑!

内存清理工具合集!大小不到1M的软件,让Windows瞬间丝滑!

软件获取 电脑内存清理工具 今天给大家带来5款内存清理工具,足够大家用了!有需要的朋友可以看看!! 第一款:ReduceMemory ReduceMemory是一款内存清理工具,压缩以后大小仅992K,非常小。软件打…

2026/6/27 0:39:09阅读更多 →
CTF 入门必备基础:Git、JSON、HTTP 请求头、BP 抓包全知识点整理

CTF 入门必备基础:Git、JSON、HTTP 请求头、BP 抓包全知识点整理

一、前言 最近刚入门 CTF Web 方向,整理了一套高频基础考点,包含git reflog源码泄露、JSON 传参漏洞、GET/POST 表单提交、HTTP 请求头伪造、HTTP 状态码、Burp Suite 激活与抓包使用,覆盖新生赛 90% 基础题型,适合新手收藏学习。…

2026/6/27 0:39:09阅读更多 →
BetterNCM安装器:3分钟搞定网易云音乐插件系统安装

BetterNCM安装器:3分钟搞定网易云音乐插件系统安装

BetterNCM安装器:3分钟搞定网易云音乐插件系统安装 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款专为网易云音乐PC版设计的跨平台插件管理工具&…

2026/6/27 0:39:09阅读更多 →
数字经济和大数据管理与应用哪个好

数字经济和大数据管理与应用哪个好

如果你正在纠结数字经济和大数据管理与应用哪个好,别只看专业名字“高不高级”,更要看自己未来想坐在哪张办公桌前。2026 年的就业市场里,企业更缺的是能把数据、业务、技术连起来的人,而不是只会背概念的人。也正因为如此&#x…

2026/6/27 0:39:09阅读更多 →
【信息科学与工程学】【通信工程】第六十九篇 企业网络的数学分析04

【信息科学与工程学】【通信工程】第六十九篇 企业网络的数学分析04

园区网络安全架构(零信任、微分段) 园区网络自动化运维(AIOps、意图网络) 园区网络绿色节能(PoE++、智能休眠) 园区网络新技术(Wi-Fi 7 MLO、5G-A URLLC) 园区网络性能优化(TCP优化、QUIC) 编号 类型 领域 子领域 问题 问题的数学分析及数值分析及算法分析…

2026/6/27 0:34:08阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →