我已经考虑了好几个小时...
我尝试解释一下,但是如果您不清楚,请尝试输入我的代码...
第一个代码遵循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并导致进一步递归。
非常感谢您!