C# asp.net 프로그램에서 재귀 함수를 사용하고 "StackOverflow Exception"을 throw합니다. 이 예외는 IIS에서 프로그램을 실행할 때 발생합니다.재귀 대 루프
재귀 함수 대신 루프를 사용하면 "StackOverflow Exception"이 발생합니까?
이 예외가 발생하면 루프 또는 재귀를 사용하는 것이 좋습니다.
편집 :
문제를 분석 한 후, 나는 재귀 수준이 1000 개 이상을하기 때문에 예외가 발생하고 오버 플로우 스택 원인이 발견했다.
이제는 여러 순환이 사용되므로 반복에 대한 순환 변환을 완전히 잃어 버렸습니다. I는 참조 용으로 여기에 샘플 코드를 게시하도록하겠습니다 :
RecursiveFunction(Node n) {
//Some Code for local variables
node.processed=true;
if(n.up){
//Create a sub node for node below the current one
if(!subnode.processed)
RecursiveFunction(subnode);
}
else{
//Create a sub node for node above current one
if(!subnode.processed)
RecursiveFunction(subnode);
}
return result;
}
참고 : 위의 샘플 코드는 무한 루프에있을 수 있습니다 난 그냥 사용하는 여러 재귀를 언급하는 데 사용하기 때문에, 실제 구현은 무한 루프가 아닙니다.
이 경우 기본 조건은 노드가 이미 처리 된 경우 재귀를 사용하지 않고 직접 결과를 반환한다는 것입니다.
내 질문에, 여러 회귀가 사용되는 경우이를 반복으로 대체 할 수 있습니다. 내가 봤 거든 반복이나 재고와 재귀를 대체하기위한 많은 제안을 발견. 하지만 반복 반복으로 여러 재귀를 대체하는 방법에 대해서는 찾지 못했습니다. 당신은 루프로 전환 할 경우
예, 당신이 StackOverflowException
을받지 않습니다 : 그것을 해결할 수 있는지를
예, 일반적으로 코드를 게시 할 수 있습니다. – weston
미안 해요, 코드를 게시 할 수 없습니다, 내 재귀 루프에 내 재귀 함수를 변환하는 경우에도 (StackOverflow 예외) 문제를 해결할 것입니다? – Anandaraj
@Anandaraj possible – Grundy