[英]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.