rip*_*rld 1 c parameters recursion parameter-passing
我一直在想它几个小时......
我尝试解释它,但如果你觉得不清楚,那就试试我的代码......
第一个代码遵循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;
}
Run Code Online (Sandbox Code Playgroud)
第二个代码遵循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;
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是func()中的参数,即"void func(int a)"和"c = a + 1".
你能解释为什么在第一个代码中"c"表现为全局变量的原因,但是在"c"变为3之后的第二个代码中,它仍然可以跳回到2并导致进一步的递归.
非常感谢你!