미니 맥 알고리즘을 구현하려고합니다. 플레이어의 각 회전을위한 최고의 이동 무엇인지 계산하는 재귀 함수이 명 상대에 대한 (각각 자신의 차례가 전 체스 등 이동) :에 익숙하지 않은 사람들을 위해자바 - 재귀 함수의 클래스 변수 변경은 나중에 삭제 되나요?
(.. 첫번째 선수는 항상 자신의 결과를 극대화하려고하기 때문에 두 번째는 항상 최초의 결과를 [최소화하기 위해 시도하는 동안, 그 반대의 경우도 마찬가지 반복적으로 플레이어 A의 선택된 이동의 결과를 계산하여.
그것은, 최소 최대라고 또한 어떤 그의 최대화를 의미]) .
기능을 호출하는 플레이어의 클래스에는 보드 (다른 클래스)가 있습니다. 플레이어는 보드에 조각을 배치하여 플레이하며 점수/경험적 점수를 계산하는 또 다른 기능이 있습니다.
내 질문은 다음과 같습니다. 각 플레이어의 결과를 계산할 때 실제로 보드에 조각을 배치하고 모든 계산을 수행해야합니다. 재귀 트리를 다시 한 번 이동하면 변경 사항이 삭제됩니까?
자바가 가치에 의해 전달되기 때문에 나는 여전히 플레이어의 테이블을 변경하기 때문에 그것을 느끼지 못한다. 그래서 매번 현재 보드를 복제하고 보드를 인수로 전달해야하는지/등등 ...
원칙적으로 아니요, 그렇지 않습니다. 변경은 변화이며, "이전"값의 개념이 없으므로 Java에서 "롤백"이라는 개념이 없습니다. 그러나 문제를 명확히하기 위해 몇 가지 예제 코드를 보여주십시오. –
나는 의도적으로 코드를 작성하지 않았다. 그리고 당신은 그것을 매우 분명하게 지적했다. 나는 일반적으로 내 질문을 해결하는 방법을 이해하려고 노력한다. 간단히 말해 클래스 속성과 변수를 기반으로 결과를 계산할 때마다 매번 새로운 "클래스"를 만드는 대신이 "롤백"동작을 만드는 일반적인 방법이 있습니까? –
"새 클래스"가 아니라 "새 인스턴스"를 의미해야합니다. 우리가 여기서 말하는 변화가 무엇인지에 대해서는 아직 명확하지 않습니다. 경우에 따라서는 재귀 함수이므로 롤백은 단순히 역순으로 수행되므로 별도의 객체가 필요하지 않지만 추가 CPU가 필요합니다. 그렇지 않으면 각 호출마다 일종의 작업 로그가 필요하며 전용 개체 스택이거나 운영 클래스의 새 인스턴스 일 필요가 있습니다. –