매우 느린 실행 때문에 반복 기능으로 변경해야하는 함수가 있습니다.
재귀 호출에는 두 가지 조건이 있습니다.반복에서 반복으로 변경
그건 이런 식으로 뭔가 :
(나는 함수 외부 클래스의 정적 배열을 가지고의 데이터를 가정 해 봅시다)
void func(int a, int b, int c, int d) {
//something
//non-recursive
//here..
for (i=0; i<data.length; i++) {
if (!data[i].x) {
data[i].x = 1;
if (a == data[i].value1)
func(data[i].value2,b,c,d);
else if (a == data[i].value2)
func(data[i].value1,b,c,d);
data[i].x = 0;
}
}
}
!
편집 : 여기 내 알고리즘은 다음과 같습니다. 함수는 그래프에서 한 지점에서 다른 지점까지 모든 경로를 검색하지만 고유 한 꼭지점 만있는 경로 하나만 반환합니다 (배열로). !!
그리고 저는 그것을 관리하는 좋은 방법은 스택을 사용하는 것입니다 ...하지만 어떻게 해야할지 모르겠습니다. 누군가 나에게 그것에 대한 힌트를 줄 수 있을까요?
FYI에서 재귀는 (호출) 스택을 사용합니다. Run recursion을 실행하면이 사이트의 이름이됩니다 ... 스택 오버플로 오류 – Bohemian
이것이 재귀 메서드의 실제 구현입니까? 그렇지 않다면, 우리에게 보여주십시오, 왜냐하면 내가 여기서 본 것은 재귀의 모든 기본 원칙을 크게 위반하기 때문입니다. 즉, 재귀를 캐스 캐 이드하는 기본 경우는 없습니다. 'if (x == y) return z;'가 아니라면, 개별 반복은 데이터의 특정 하위 집합과 겹치는 부분을 처리하지 않습니다. 즉, 반복 할 때마다 'data'의 전체 길이를 반복 할 수 있습니다. –
이 방법으로 무엇을하려고합니까? 일반적인 "반복 반복 변경"변경은 거의 동일한 실행 시간을가집니다. – amit