0
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;
}
Howewer, 그냥 나에게 처음으로 조합을 출력한다. 잠시 동안 디버깅 한 결과 지역 변수 '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 루프에서도 초기화되고 값이 다른 곳에서는 변경되지 않는 이유는 무엇입니까?
.... 왜냐하면 당신의 함수가 반복적이기 때문입니다 ...... – LPs
변수'j'를 루프에서 인쇄하고 당신이 볼 것입니다 ... 당신은 "private"'j'가 필요합니다. 재귀가 단락 된 경우 순열에 대한 각 호출. –
당신은 방금 전역 변수를 사용하는 것을 꺼리는 이유를 찾았습니다;) 재진입을 막고 글로벌 프로그램에 부작용이 생겼습니다 .... http://stackoverflow.com/questions/484635/are-global-variables-bad – Garf365