이 YouTube 자습서 의 코드 를 단계별로 진행 중이며 재귀 인쇄 기능을 많이 이해할 수 없습니다.
public void Print(Node N, ref string s)
{
if (N == null) { N = top; }
if (N.left != null)
{
Print(N.left, ref s);
s = s + N.value.ToString().PadLeft(3);
}
else
{
s = s + N.value.ToString().PadLeft(3);
}
if (N.right != null)
{
Print(N.right, ref s);
}
}
트리를 채우기 위해 다음 정렬되지 않은 배열을 사용하고 있습니다.
int[] unsortedArray = new int[] {5, 17, 11, 24, 3, 18, 9};
나는 Print
메소드 의 첫 번째 패스를 통해 top
값이 5와 같다는 것을 이해합니다. 그런 다음 프로그램은 첫 번째 조건으로 떨어지고이 재귀 호출을 실행합니다.
Print(N.left, ref s);
입력 매개 변수 Node N
는 이제 트리에서 가장 낮은 값인 루트의 왼쪽 노드 null
이므로 왼쪽 노드는 다음 과 같은 else
조건으로 떨어집니다.
else
{
`s = s + N.value.ToString().PadLeft(3);
}
내가 길을 잃은 곳은 다음에 일어날 일입니다. 나에게는이 노드에 올바른 리프가 없기 때문에 프로그램이 if(N.right !=null)
조건을 평가 한 다음 Print
메서드 를 종료하는 것 같습니다.
대신 코드는를 평가 한 if
다음 Print(N.left, ref s);
첫 번째 조건 의 줄로 이동합니다 .
if (N.left != null)
{
Print(N.left, ref s);
s = s + N.value.ToString().PadLeft(3);
}
처음으로 재귀를 탐구합니다. 왜 이것이 왜 나에게 말할 수 있습니까?
이 게시물을 작성한 후 답변이 매우 명확 해졌습니다. 프로그램이이 줄로 다시 점프하는 이유
Print(N.left, ref s);
재귀 호출이 시작된 곳입니다. 입력 매개 변수에 Node N
더 이상 올바른 노드가 포함되지 않으면 프로그램은 해당 메소드 반복을 종료합니다. 누군가가 이것을 더 잘 설명 할 수 있으므로 잠시 동안 선택된 답변없이 게시물을 남겨 두겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다