全局变量

时间:2016-08-30 10:22:08

标签: c global-variables permutation

我正在使用置换函数来计算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;
}

但是,它只是打印了我的第一个组合。 我调试了一段时间,发现添加一个局部变量'j'到permutate函数,它工作。

 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循环中被初始化并且其他地方的值没有改变时?

1 个答案:

答案 0 :(得分:0)

你写了一个递归函数。

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

因此,j从递归返回时的值会发生变化:调用之前的值将丢失。