c -在循环内部和外部初始化变量时,结果不同



我尝试过回溯算法,当我在for循环内外初始化变量时收到不同的结果,但我不明白为什么。

#include <stdio.h>
int a[10];
int n;
int i;
int j;   //difference
void display(){
for (i = 1; i <= n; i++) printf("%d", a[i]);
printf("%n");
}
void Try(int k){
for (j = 0; j <= 1; j++){                //difference
a[k] = j;
if (k == n) display();
else Try(k + 1);
} 
}
int main(){
n = 2;
Try(1);
}

#include <stdio.h>
int a[10];
int n;
int i;
//int j;   //difference
void display(){
for (i = 1; i <= n; i++) printf("%d", a[i]);
printf("%n");
}
void Try(int k){
for (int j = 0; j <= 1; j++){                //difference
a[k] = j;
if (k == n) display();
else Try(k + 1);
} 
}
int main(){
n = 2;
Try(1);
}

第一个代码的结果只是00,01但第二个代码的结果是00,01,10,11(预期结果)。

为什么会有这样的区别?

第一种情况:j是一个全局变量,因此当执行else Try(k + 1);时,j被重新初始化为零,并且在退出Try(k + 1);之后,j的值现在等于2,因此它将存在于for循环并结束您的代码。

但是在第二种情况下:j是一个局部变量,所以当再次输入try函数时,它将j视为与旧j不同的变量。它不是你想要访问的变量。

写递归函数时要小心。避免使用全局变量

相关内容

  • 没有找到相关文章

最新更新