c++ - 静态变量的递归函数控制流程如何变化?
问题描述
我正在尝试学习一些有关递归函数的东西,并尝试运行它
void recurse()
{
static int c = 1;
if(c > 5)
return ;
printf("%d ",c);
c = c + 1;
recurse();
printf("%d ",c);
}
int main()
{
recurse();
return 0;
}
我期望它会给我这样的输出,类似于在递归函数中调用的任何局部变量。
1 2 3 4 5 5 4 3 2 1
但是编译器给了我这样的输出
1 2 3 4 5 6 6 6 6 6
我不明白为什么会出现这种输出。谁能解释一下?
解决方案
由于. printf
_recurse()
到递归调用完成时, 的值c
已经增加到 6。因此它将打印 6 五次。
如果您希望输出为1 2 3 4 5 5 4 3 2 1
,请使用另一个变量并在适当条件下d
根据 的值对其进行递增/递减。c
void recurse()
{
static int c = 1; int d;
if(c > 5) {
d = d - 1;
return ;
}
printf("Count = %d\n",c);
d = c;
c = c + 1;
recurse();
printf("Count = %d\n",d);
}
在此处查看演示。
推荐阅读
- angular - 类型“{}”上不存在属性“更新”
- c - c stdlib.h 中 RAND_MAX 和 rand() 的说明
- c++ - Qt:使用 Visual Studio 进行单元测试
- angular - Angular 5 组合或重构多个订阅调用
- kotlin - kotlin 字段未设置值
- ruby-on-rails - 找不到带有可执行导轨 (Gem::GemNotFoundException) 的 gem railties (>= 0.a)
- javascript - JS - 使用 lodash 删除数组中的重复对象
- c - 将#define 创建的宏传递给函数/数组
- azure - 在 Azure 中创建 VM 时,虚拟网络可以位于不同的资源组中吗
- javascript - 使 javascript 方法在所有情况下都有效(在 ajax 调用之前和之后)