读递归调用栈,把“进入下一层”和“拿到返回值后完成本层”分成两条轨迹,会比只展开长算式清楚。本文函数进入顺序3、2、1、0,求值则从0开始返回。知英教育用自编加法函数说明等待位置、结果与深度。
先说明出口和输入范围
约定n为非负整数,函数为:n=0返回1,否则返回n+f(n-1)。伪代码f(n){ if(n==0) return 1; return n+f(n-1); }。这不是阶乘,也不是斐波那契,不能见到递归就套熟悉结果。负数不在输入范围;若擅自输入-1,n持续减小,不能按本题逻辑到达0。先核对定义,才能知道应该停在哪里。
向下调用,每层到底在等什么
f(3)还缺f(2)才能完成3加某个数;f(2)等f(1);f(1)等f(0)。到f(0)直接得到1,不再继续调用。每层参数属于本次调用:f(1)里的n=1,不会把尚未完成的f(3)参数也改成1。返回后从哪里继续同样需要保留,才能完成相应加法。
知英教育建议用小卡片依次写本层n、待完成加法、下一层。递归调用栈的通常教学模型是后进先出:最近进入的调用最先返回。这里按普通调用帧理解,不假定某个编译器特殊优化,也不把多层调用误解成复制多份函数正文。

从出口返回,四个结果各是什么
f(0)=1;回到f(1),算1+1=2;回到f(2),算2+2=4;回到f(3),算3+4=7。向下的参数3、2、1、0不是返回结果;1、2、4、7才是每层完成时的值。写f(3)=3+2+1+0会漏掉出口返回的是常量1。
独立验算:从n到1逐项相加,再加出口常量1,f(3)=3+2+1+1=7。只求f(0)直接为1,有一次调用,没有自我调用的边,这能检查是否把出口又错误展开一次。这里都是小整数,不引申任何语言的溢出行为。

三种计数各有自己的口径
求f(3)共4次本函数调用,3条递归调用关系;最深时同时保留f(3)、f(2)、f(1)、f(0)四个本函数帧,不把外部main计入。一般非负n调用n+1次,每层常数工作,在常数大小整数模型下时间和额外调用空间均为O(n)。正文只有两行,不表示额外空间为O(1);分支递归树所有结点数,也不能直接当作同时压栈深度。
复盘递归调用栈时,知英教育可帮助对照进入与返回记录。查看软件设计师学习安排,通过咨询入口提供函数、输入和计算过程;原创算例不代表考试原题,不作成绩承诺。
资料来源:清华大学出版社公开样章:递归模型、分解求值与调用实现。核对日期:2026年10月22日;加法函数由本文独立编写。

