我已经考虑了好几个小时了......
我试着解释一下,但如果你觉得不清楚,试试我的代码...
第一个编码在i = 1,1,1,2,3,2,3,2,3之后,c在0-->1-->2-->3之后。
#include <stdio.h>
int c = 0;
void func (int a){
c = a + 1;
printf("%d", c+100);
for (int i = 1; i <= 3; i++)
{
printf("%d", i );
if (c <= 2){
func(c);
}
}
}
int main(int argc, const char *argv[]){
func(c);
return 0;
}
第二个代码在 i = 1,1,1,2,3,2,1,2,3,3,1,2,3,2,1,1,2,3...(39 i一共),c 遵循 0-->1-->2-->3-->2-->3-->2-->3。
#include <stdio.h>
int c = 0;
void func (int c){
c = c + 1;
printf("%d", c+100);
for (int i = 1; i <= 3; i++)
{
printf("%d", i );
if (c <= 2){
func(c);
}
}
}
int main(int argc, const char *argv[]){
func(c);
return 0;
}
唯一不同的是 func() 中的参数,即“void func (int a)”和“c = a + 1”。
你能解释一下为什么在第一段代码中“c”表现为全局变量,但在第二段代码中“c”变为 3 后它仍然可以跳回到 2 并导致进一步递归的原因。
非常感谢!
最佳答案
当您在第二个func
中声明参数int c
时,它shadows全局 c
,因此函数范围内的所有进一步更改仅适用于局部 c
而不是全局。
关于c - 为什么这两个相似的递归 C 代码给出不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54207244/