全局变量的作用

Effect of global variable

我正在使用一个排列函数来计算 C 语言中数组的所有排列。 该函数的原型是:

#include <stdio.h>
int arr1[]={1,2,3,4,5},N,i,x,j;

void swap1(int s,int t)
{

    int temp1=arr1[s];
    arr1[s]=arr1[t];
    arr1[t]=temp1;
}

void permutate(int i)
{  
    if(i==N){
      for(x=0;x<N;x++){
        printf("%d",arr1[x]);
      }
    printf("\n");
   }
   else{
      for(j=i;j<N;j++){
        swap1(i,j);
        permutate(i+1);
        swap1(i,j);
      }
   }
}

int main(void)
{
        N=5;
        permutate(0);
    return 0;
}

然而,它只是给我打印了第一个组合。 我调试了一会儿,发现在permutate函数中添加一个局部变量'j',它起作用了。

 void permutate(int i){
    int j;                  <<<---this is my problem
    if(i==N){
      for(x=0;x<N;x++){
        printf("%d",arr1[x]);
      }
    printf("\n");
   }
   else{
      for(j=i;j<N;j++){
        swap1(i,j);
        permutate(i+1);
        swap1(i,j);
      }
   }
}

当它也在for循环中初始化并且值在其他任何地方都没有改变时,为什么会这样?

你写了一个递归函数。

使用全局变量j每次递归调用改变全局值的值。

因此 j 的值在递归 return 时发生了变化:调用前的值丢失了。