c - 在此代码中,静态变量不会使用递归递增

标签 c recursion output increment

为什么静态变量a的值即使在return语句之后也没有增加?

#include<stdio.h>
int p(int x);
int main()
{   
  int r=p(4);
  printf("%d",r);
  return 0;
}

int p(int x)
{
  static a=1;
  printf(" x = %d,a= %d\n",x,a);

  if(x<=1)
  {
    return 1;
  }
  else
  {
    printf(" x = %d,a= %d\n",x,a);    
    return p(x-1)+x+a++;
    printf(" x = %d,a= %d\n",x,a);    
  }
}

在这里,当我打印静态变量a时,它的值始终为1。但根据我读到的理论,它应该在每次递归调用后递增。

最佳答案

表达式p(x-1) + x + a++的求值顺序未指定。我们知道所有三个操作数在求和之前都会被求值,但我们不知道它们的求值顺序(这取决于编译器)。在您的情况下,编译器首先计算 p(x-1),因此递归函数调用中 a 的值始终为 1,并且仅在程序从所有递归调用。

关于c - 在此代码中,静态变量不会使用递归递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731983/

相关文章:

haskell - 从第二个字符串中删除第一个字符串中的所有字符的函数

c++ - 在 .h 文件外编写输出运算符重载的实现

c - 使用malloc动态分配内存,尝试在cygwin中编译时收到错误

c - 整数连接 c

c - c中的结构初始化

python - 在Heroku上的python worker进程中使用try语句来处理由于对等错误而导致的连接重置是否理想?

c - 这里 fork 了多少个进程

algorithm - 在没有单独函数的情况下实现递归

c - k为什么为零?

bash - 测试并记录终端输出