Я думал об этом часами ...
Я пытаюсь объяснить это, но если вы чувствуете, что это не ясно, просто попробуйте мои коды ...
Первый код следует за 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 и привести к дальнейшей рекурсии.
Большое спасибо!