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'を追加することがわかりました。
forループでも初期化されているにもかかわらず、他の場所で値が変更されないのはなぜですか?
....あなたの関数のために再帰的です...... – LPs
変数 'j'をループ内で印刷して追跡すると、なぜでしょう...あなたは" private "' j'を必要とします再帰が短絡されていない場合は、各呼び出しは順列になります。 –
あなたは誰もがなぜグローバル変数を使用することを嫌うのかを知ることができます;)再入場を中断し、グローバルプログラムに悪影響を及ぼします.... http://stackoverflow.com/questions/484635/are-global-variables-bad – Garf365