You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么这段包含静态变量的C语言代码调用f(5)的输出结果是18?

C语言代码f(5)返回值18的推导过程

示例代码

#include <stdio.h>
int f(int n)
{
    static int r = 0;
    if (n <= 0) return 1;
    if (n > 3)
    {
        r = n;
        return f(n-2)+2;
    }
    return f(n-1)+r;
}
 
int main()
{
    printf("%d", f(5));
}

核心注意点

  • 函数内部用static修饰的局部变量r仅会在第一次调用f函数时执行初始化赋值为0,后续所有调用f函数时都不会重置r的值,r的取值会在多次调用之间保留。

调用链路正向执行过程

  1. 首次调用f(5):n=5>3,将r赋值为5,返回值为f(5-2) + 2即f(3) + 2
  2. 调用f(3):n=3≤3,不满足n>3的条件,返回值为f(3-1) + r即f(2) + 5(此时r的取值是之前赋值的5)
  3. 调用f(2):n=2≤3,返回值为f(2-1) + 5即f(1) + 5
  4. 调用f(1):n=1≤3,返回值为f(1-1) + 5即f(0) +5
  5. 调用f(0):n=0≤0,直接返回1

返回值反向计算过程

  • f(0) = 1
  • f(1) = f(0) +5 = 1+5=6
  • f(2) = f(1) +5 =6+5=11
  • f(3) = f(2) +5 =11+5=16
  • f(5) = f(3) +2 =16+2=18

内容的提问来源于stack exchange,提问作者Rushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:15:00