全局变量的作用
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 时发生了变化:调用前的值丢失了。
我正在使用一个排列函数来计算 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 时发生了变化:调用前的值丢失了。