在 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 不同的变量。这与您尝试访问的变量不同。

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