在 for 循环内外初始化变量时的不同结果
Different results when initializing a variable inside and outside for loop
我已经尝试过回溯算法,当我在 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
是一个全局变量,所以当 execute else Try(k + 1);
j 被重新初始化为零,然后退出 Try(k + 1);
j
的值现在等于 2,所以它将存在 for 循环并结束你的代码。
但在第二种情况下:
j
是局部变量,因此当再次进入 try
函数时,它会将 j
视为与旧 j
不同的变量。这与您尝试访问的变量不同。
写递归函数时要小心。避免使用全局变量。
我已经尝试过回溯算法,当我在 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
是一个全局变量,所以当 execute else Try(k + 1);
j 被重新初始化为零,然后退出 Try(k + 1);
j
的值现在等于 2,所以它将存在 for 循环并结束你的代码。
但在第二种情况下:
j
是局部变量,因此当再次进入 try
函数时,它会将 j
视为与旧 j
不同的变量。这与您尝试访问的变量不同。
写递归函数时要小心。避免使用全局变量。