我在此代码中使用“ static”关键字时遇到问题。在这里,在n = 3之后,我以为'r'的值为5,但我发现那里也使用'r = 50'。我不知道这里的“静态”是如何工作的。
int magic(int n)
{
static int r = 5;
if(n<=0) return 10;
if(r>3)
{
r = 50;
return(r + magic(n-1));
}
return(r - magic(n-1));
}
int main()
{
int x;
x = magic(8);
printf("%d",x);
}
这里输出为290。
因为它们在所有情况下都取'r = 50'。请有人帮助我。
[当您有'static int r = 5;'语句时,这向编译器发出信号,变量r
将被初始化为值5
在编译时。这意味着,每次调用该函数时,它将not重置为5
!
此外,if (r > 3)
行也无法按照您的建议运行(请参阅我的评论)!更改为if (n > 3)
就是您所说的。
无论如何,以下代码做了一些不同的事情(输出245),但是我不确定您期望的输出是什么:
#include <stdio.h>
int magic(int n)
{
int r = 5; // NOT STATIC - so this is reset to 5 at the start of each call!
if (n <= 0) return 10;
if (n > 3) // Your "if (r > 3)" means the bloxk will ALWAYS execute!
{
r = 50;
return(r + magic(n - 1));
}
return(r - magic(n - 1));
}
让我知道这是否不能回答您的问题!我将尽我所能使您更接近所需的解决方案!