I was using a permutation function to compute all the permutations of an array in C language. A prototype of the function is :
#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,it just printed me the first combination. I debugged for a while and found out that adding a local variable 'j' to permutate function, it worked.
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);
}
}
}
Why is it occurring like this,when it is being initialized in for loop too and the value is not changed anywhere else?