遞迴生成格雷碼

s故事說給風聽1127發表於2018-04-19

【程式】

#include <stdio.h>
int n;
char s[17];   //假設最大隻有16位
void dfs(int i)
{
	if(i==n)
		printf("%s\n",s); //到達底部就輸出
	else
	{
		dfs(i+1); 	//深度優先搜尋
		if(s[i]=='0')
			s[i]='1';
		else
			s[i]='0'; //把當前位逆轉
		dfs(i+1); 	//繼續向下搜尋
	}
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=0; i<17; i++)
		s[i]='0';
	s[n]='\0';
	dfs(0);
	printf("\n");
}

相關文章