2013-08-24 2 views
3

나는 방법은 25c5 조합을 찾는 재귀 적 방법조합을 찾는 여러 루프 코드를 재귀 적 방법으로 변환하는 방법은 무엇입니까?

for(int i=0;i<25;++i) 
    for(int j=i+1;j<25;++j) 
    for(int k=j+1;k<25;++k) 
     for(int l=k+1;l<25;++l) 
     for(int m=l+1;m<25;++m) 
     {//} 

이 코드를 변환하려합니다. 순환 식으로 나는 재귀의 수는 600 만하지만 실제는 50,000를해야 원인이

int soln[5]; 
void backtrack(int c) 
{ 
if(c<5) 
{ 
    for(int i=c;i<25;++i) 
    { 
     soln[c] = i; 
     backtrack(c+1); 

    } 
} 
else 
{ // } 

내 SOLN 분명히 잘못 작성했습니다. 어떻게 수정합니까?

+0

C/C++/some other를 사용하는 언어에 태그를 추가하십시오. –

+0

3 중첩 루프를 올바르게 변환 할 수 있습니까? 그렇다면 네 네스트 루프 **? ** –

답변

2
void backtrack(int start, int depth) { 
    if (depth < 5) { 
    for (int i = start; i < 25; ++i) { 
     backtrack(i + 1, depth + 1); 
    } 
    } 
} 

마치 중첩 루프와 동일한 기능을합니다.

1

우리가 성능을 비교할 때 재귀 적 방식보다 중첩 된 루프가 더 좋습니다. 재귀 적 방법으로 메소드를 호출해야하는데 시간이 좀 걸립니다.