C 언어 재 귀 는 전체 배열 을 실현 한다.

1331 단어 알고리즘
전체 배열: m 개 데이터 에서 n 개의 데 이 터 를 꺼 내 모든 조합 을 출력 할 가능성
예 를 들 어 ABC 에서 2 개의 데 이 터 를 꺼 내 모든 가능성 을 출력 합 니 다.
AB
AC
BA
BC
CA
CB
우 리 는 ABC 를 번 호 를 매기 고 used [] 라 는 배열 에 저장 합 니 다. 시작 할 때 할당 값 을 0 으로 표시 합 니 다. 어떤 문자 도 꺼 내지 않 았 습 니 다.
어떤 하위 문자 가 추출 되 었 을 때, 우 리 는 그의 아래 표 시 된 used 배열 을 1 로 설정 합 니 다.
두 개의 숫자 만 취하 기 때문에 우 리 는 i 로 i < = 2 시 재 귀 끝 을 표시 합 니 다.
1. 매번 재 귀 함수 에서 우 리 는 전체 문자 의 메 인 문자열 을 옮 겨 다 니 며 used 배열 의 값 이 1 인지 판단 해 야 합 니 다. 1 이면 이 문자 가 이미 사용 되 었 음 을 증명 하고 다음 문 자 를 꺼 내 서 usd 배열 의 값 이 0 일 때 까지 하위 문자열 에 넣 으 려 고 합 니 다.
2. 이때 하위 문자열 에 이미 문자 가 있 습 니 다. 이 문 자 는 이미 사용 되 었 음 을 표시 합 니 다. 재 귀적 으로 자신 을 호출 합 니 다. 재 귀적 함수 가 돌아 오 면 이 문자열 이 답 을 찾 았 고 출력 되 었 음 을 증명 합 니 다. 다음 에 사용 하지 않 은 문 자 를 배치 합 니 다.
3. 종료 조건 i > = 2
코드:
void FullArray(char *source,int sourceLen, int *used, int i,int count,char *dest)
{
	int index = 0;//        
	if(i >= count){
		printf("%s
", dest);//count , }// else{ for(index = 0; index < sourceLen; index++){// if(used[index] == 0){// dest[i] = source[index]; used[index] = 1;// , FullArray(source,sourceLen,used,i+1,count,dest); // , used[index] = 0;// , } } } }

좋은 웹페이지 즐겨찾기