user-0 提问: 帮忙解释下递归调用的压栈过程！

回复:
user: user-1
content: 关于递归我说两点，领悟了，便算掌握递归了。 1.把递归当成普通函数，然后理解整个函数的语义，这个函数的每个调用要从逻辑上讲得通。 2.递归得有个”出口“，否则就无限调用了。

user: user-2
content: 引用 11 楼 zhang5476499 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出赵老师，你的这个回复貌似以前看过。[/quote] 估计我的所有回复中，算全新内容的占总数5%不到吧。

user: user-2
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-0
content: 引用 16 楼 ForestDB 的回复:题目的意思，与其说是地址，不如说是行数，即运行到哪一行。  计算机系统的栈，不是具体语言写出来的，而是一个运行的程序，它的内存分布的一个客观存在的一片区域，这片内存的使用，遵循“后进先出”的栈的行为，所以被称为“栈”。  顺序表是“概念”，除了首尾，每一个元素只有一个“前”一个“后”，这样的东西就是“顺序表”；反观数组，它只是一种“实现”，链表也是“顺序表”的一种实现。  另外常见的顺序表的实现，数组也好，链表也好，元素的类型都是相同的，但是就顺序表这个概念来说，根本就没有这个要求，元素可以是不同类型的，扩展了这个概念的，其实就是广义表了。  学计算机的东西，分清楚“概念”和“实现”。嗯，此楼讲解的很通俗易懂。

user: user-3
content: 题目的意思，与其说是地址，不如说是行数，即运行到哪一行。  计算机系统的栈，不是具体语言写出来的，而是一个运行的程序，它的内存分布的一个客观存在的一片区域，这片内存的使用，遵循“后进先出”的栈的行为，所以被称为“栈”。  顺序表是“概念”，除了首尾，每一个元素只有一个“前”一个“后”，这样的东西就是“顺序表”；反观数组，它只是一种“实现”，链表也是“顺序表”的一种实现。  另外常见的顺序表的实现，数组也好，链表也好，元素的类型都是相同的，但是就顺序表这个概念来说，根本就没有这个要求，元素可以是不同类型的，扩展了这个概念的，其实就是广义表了。  学计算机的东西，分清楚“概念”和“实现”。

user: user-2
content: 估计至少得两、三年吧。

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:[quote=引用 11 楼 zhang5476499 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出赵老师，你的这个回复貌似以前看过。[/quote] 估计我的所有回复中，算全新内容的占总数5%不到吧。[/quote]不过我最感兴趣的是学多久才能学到你的这种程度？本人计算机专业大二学生，我接触C语言（第一门语言，现在还有c++）到现在已经10个月啦。   不知按这种速度，什么时候才能可以拿出技术去用！

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:“给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出赵老师，你的这个回复貌似以前看过。

user: user-2
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-1
content: 就当成普通函数调用那样来分析就行了

user: user-4
content: 如果还不懂 就得画图了最清楚了 我描述能力不好  这也不是很厉害 晚上回去 有空帮你画一张图  全懂了就  但是最后你自己找出答案 你自己画画

user: user-4
content: 引用 5 楼 zhang5476499 的回复:[quote=引用 3 楼 u011779875 的回复:] 这个在延伸 就会讲到 虚拟进程地址空间 这个概念  高手和菜鸟之分 我认为就在这个分水岭 犹如北方与南方 的淮河为界限那个返回地址具体指的是哪一句的地址啊？[/quote] 递归调用 最后一次的返回地址 返回的是上一次的调用 只有递归到最后才会依次返回到第一层调用

user: user-4
content: 引用 4 楼 zhang5476499 的回复:[quote=引用 2 楼 u011779875 的回复:] 计算机系统中，用的是什么语言写的栈？这个栈是顺序栈还是链栈？  计算机系统的栈 分为用户栈 和内核栈之分 这种栈和数据结构的栈 不是俩回事 你不要混了  这种栈是带栈顶指针 和基址指针的   此栈非比栈 内存中连续的任何地方 只要是想作为压栈出栈 只是个思想 具体实现是 特定的寄存器来搞定的还有我一直不明白顺序表与静态数组的关系。我一直认为顺序表就是静态数组的别名。 [/quote] 我的理解啊  仅供参考 顺序表 就是静态数组的别名 这样理解是有偏差的  这个顺序表的意思应该是 连续存储的别称  就是你有东西连续存储的 这样才成为顺序  顺序表概念来源于数据结构 基础数据 无非 增删改查  所以它代表的是一种思想 连续的概念  例如 内存区域的连续 链表 内存区域也可以是连续的啊 但是这样没多大意义  把零散的内存集中起来 这才是它的意义

user: user-0
content: 引用 3 楼 u011779875 的回复:这个在延伸 就会讲到 虚拟进程地址空间 这个概念  高手和菜鸟之分 我认为就在这个分水岭 犹如北方与南方 的淮河为界限那个返回地址具体指的是哪一句的地址啊？

user: user-0
content: 引用 2 楼 u011779875 的回复:计算机系统中，用的是什么语言写的栈？这个栈是顺序栈还是链栈？  计算机系统的栈 分为用户栈 和内核栈之分 这种栈和数据结构的栈 不是俩回事 你不要混了  这种栈是带栈顶指针 和基址指针的   此栈非比栈 内存中连续的任何地方 只要是想作为压栈出栈 只是个思想 具体实现是 特定的寄存器来搞定的还有我一直不明白顺序表与静态数组的关系。我一直认为顺序表就是静态数组的别名。

user: user-4
content: 这个在延伸 就会讲到 虚拟进程地址空间 这个概念  高手和菜鸟之分 我认为就在这个分水岭 犹如北方与南方 的淮河为界限

user: user-4
content: 计算机系统中，用的是什么语言写的栈？这个栈是顺序栈还是链栈？  计算机系统的栈 分为用户栈 和内核栈之分 这种栈和数据结构的栈 不是俩回事 你不要混了  这种栈是带栈顶指针 和基址指针的   此栈非比栈 内存中连续的任何地方 只要是想作为压栈出栈 只是个思想 具体实现是 特定的寄存器来搞定的

user: user-0
content: 哦，忘了写题目了，题目是这样的。