2014-12-30 4 views
0

재귀를 사용하여 주어진 입력에서 k 개의 길이 집합을 인쇄하려고합니다. 내가 원하는 것을 예 :주어진 부분 집합에서 길이 k의 문자열 인쇄

입력 :

3 
a b c 

출력 : 등등

aaa 
aab 
aba 
. 
. 

.

나는 가비지 값을 얻고 있습니다!

int klength(char input[],char output[],int size, int k, int curr){ 
    int i=0; 
    if(k<=0) 
    { 
    puts(output); 
    return 0; 
    } 
    for(i=0;i<size;i++) 
    { 
     output[curr]=input[i]; // **EDIT** 
     printf("current output %s\n",output); 
     klength(input,output,size,k-1,++curr); 
     printf(" after recursion %s]n,output); 
    } 
} 

누군가 내 실수를 지적 할 수 있습니까?! 나는 어떻게 든 나의 실수를 발견 할 수 없으며 조금 시간이 조금 흐르고있다 : \ 미리 감사드립니다!

+0

왜'void main' –

+0

'(ch == '\ n'|| '\ 0')'이 잘못된 이유는 무엇입니까? 'if (ch == '\ n'|| ch == '\ 0')' – Himanshu

답변

3
klength(input,output,size,k-1,++curr); 

여기 당신은 curr가 빠르게 증가하고 결국 출력 버퍼 오버 플로우 의미 루프, 각 시간을 증가. 원하는 사람

klength(input,output,size,k-1,curr+1); 

대신에.

+0

감사합니다. 지금은 작동하지만, 정확히 무엇이 잘못 되었습니까? ++ curr 또한 curr + 1과 같은 횟수만큼 증가시켜야합니까? – joanOfArc

+1

@joanOfArc 아니요, 전자는 curr의 값을 수정하지만 후자는 curr + 1의 산술 연산 결과 만 전달하므로 curr 자체는 변경되지 않습니다. –

관련 문제