此静态关键字如何影响输出?

问题描述 投票:0回答:1

我在此代码中使用“ 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'。请有人帮助我。

c recursion static
1个回答
0
投票

[当您有'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));
}

让我知道这是否不能回答您的问题!我将尽我所能使您更接近所需的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.