我正在尝试学习一些有关递归函数的知识,并且尝试运行此函数
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
我不明白为什么会出现这种输出。谁能解释?
答案 0 :(得分:-1)
由于printf
中的第二个recurse()
,将打印6s系列。
在递归调用完成时,c
的值已经增加到6。因此它将打印5次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);
}
请参见演示here。