HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍一、汇编为什么能递归二、递归的三要素汇编视角三、最经典示例阶乘 n!数学定义1️⃣ 递归结构伪代码2️⃣ x8616 位 DOS递归实现四、递归调用栈变化非常重要五、32 位 x86cdecl 调用约定六、递归常见问题考试必考❌ 1. 忘记保存寄存器❌ 2. 没有递归出口死递归❌ 3. 栈溢出七、尾递归优化思想八、还能用递归做什么九、一句话总结下面用x8616 位 / 32 位通用思想​ 讲清楚汇编中的递归这是很多教材和考试的难点。我会按「能不能递归 → 怎么实现 → 完整示例 → 常见坑」来讲。一、汇编为什么能递归✅因为函数调用本身就是用栈Stack实现的递归 多次函数调用每一次调用都会保存返回地址保存局部变量保存寄存器栈 递归的生命线二、递归的三要素汇编视角要素汇编中对应递归出口CMP JE/JNE递归调用CALL参数传递栈 / 寄存器返回结果AX三、最经典示例阶乘 n!数学定义n! n × (n-1)! , n 1 1! 11️⃣ 递归结构伪代码int fact(int n) { if (n 1) return 1; return n * fact(n - 1); }2️⃣ x8616 位 DOS递归实现; 输入CX n ; 输出AX n! fact PROC CMP CX, 1 JNE recur MOV AX, 1 RET recur: PUSH CX ; 保存 n DEC CX CALL fact ; fact(n-1) POP CX ; 恢复 n MUL CX ; AX AX * CX RET fact ENDP✅关键点PUSH CX保存当前层参数CALL fact递归POP CX恢复现场MUL CX合并结果四、递归调用栈变化非常重要假设fact(3)CALL fact(3) CALL fact(2) CALL fact(1) RET RET RET栈中内容[ ret addr ] [ 3 ] [ ret addr ] [ 2 ] [ ret addr ]每一层都有独立空间五、32 位 x86cdecl 调用约定; int fact(int n) fact: push ebp mov ebp, esp mov eax, [ebp8] ; n cmp eax, 1 jne recur mov eax, 1 jmp end recur: dec eax push eax call fact add esp, 4 imul eax, [ebp8] end: mov esp, ebp pop ebp ret✅标准栈帧EBP基址[EBP8]第一个参数六、递归常见问题考试必考❌ 1. 忘记保存寄存器PUSH BX CALL fact POP BX❌ 2. 没有递归出口死递归CALL fact JMP fact ; ❌❌ 3. 栈溢出递归太深忘记RET参数没平衡七、尾递归优化思想fact_tail(n, acc): if n1 return acc return fact_tail(n-1, n*acc)汇编中可转成循环不压栈八、还能用递归做什么✅ 斐波那契✅ 汉诺塔✅ 字符串逆序✅ 目录遍历✅ 二叉树遍历例如字符串逆序递归reverse(s): if empty: return reverse(rest) print(first)九、一句话总结汇编递归 栈 CALL RET 参数保存如果你愿意我可以✅ 给你汉诺塔递归经典大题✅ 给你递归 vs 循环对比✅ 给你考试标准写法✅ 改成x86‑64 / NASM / Linux直接说你现在用的环境 想写的递归题目。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧