繁体   English   中英

为什么这个静态函数的输出是 18?

[英]Why the output is 18 of this static function?

#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));
}

这个怎么解决? 我使用了静态变量 r 并初始化为零。 并从 main 调用该函数。 我得到的输出是 18。

 1| #include <stdio.h>
 2| int f(int n)
 3| {
 4|     static int r = 0;
 5|     if (n <= 0) return 1;
 6|     if (n > 3)
 7|     {
 8|         r = n;
 9|         return f(n-2)+2;
10|     }
11|     return f(n-1)+r;
12| }

int main()
{
    printf("%d", f(5));
}
  • 当您调用f(5) ,该函数设置r=5并在 l.9 处返回: f(3)+2
  • 当您调用f(3) ,函数在 l.11 处返回: f(2)+5
  • 当您调用f(2) ,函数在 l.11 处返回: f(1)+5
  • 当您调用f(1) ,函数在 l.11 处返回: f(0)+5
  • 当您调用f(0) ,该函数在 l.5 处返回: 1

所以:

  • f(1)1+5
  • f(2)1+5+5
  • f(3)1+5+5+5
  • f(5)1+5+5+5+2 => 18

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM