숙제 과제의 일환으로 자바로 간단한 체스 게임을 프로그래밍해야합니다. 재귀를 실험 할 수있는 기회를 생각하고 있었고 재귀 적 코드에 대해 체스에 확실한 후보가 있는지 궁금해하고 있었습니까?체스 프로그래밍에서 재귀를 잘 사용합니까?
답변
나에게 가장 확실한 후보는 최고의 이동 검색에 대한 재귀 최소 최대 루틴이 될 것입니다. 이것은 또한 검색 알고리즘의 이론에 많은 영향을 주며 구현하기에 매우 멋지다.
예 :
http://www.devshed.com/c/a/Practices/Solving-Problems-with-Recursion/6/
나는 재귀 minmax에 대한 대안이 없다고 생각한다. (아이디어가 KI를 개발하는 것이라면) –
알파 - 베타 http://www.fierz.ch/strategy1.htm –
을 설명하는 링크도 유용하다. 훌륭한 기사. 이것은 다른 단계에서 다르게 사용되는 방법 인 것 같습니다. 어쩌면 친구를위한 버전과 다른 깊이를 가진 다른 목표 (예 : 조각을 포착)를위한 버전이있을 수 있습니다. 흠 ... 재미 있습니다. – JDelage
하지 체스하지만, 체스 피게 라스 고전 퍼즐 : http://en.wikipedia.org/wiki/Eight_queens_puzzle
당신은 생각에 대한 backtracking
깊이 우선 탐색은 재귀에 대한 주요 후보입니다. 그러므로 숙제를 위해 인공 지능을 프로그래밍한다면, 최상의 다음 행동을 파악하려고하는 인공 지능의 표정 알고리즘이 좋은 후보가 될 것입니다.
주의 - 메모리가 부족할 수도 있습니다. AI가 볼 수있는 움직임의 수를 제한하려고합니다.
예 있습니다. 만약 당신이 흰색을 말하는 어떤 위치의 "힘"을 평가하는 함수가 있다면. 조각을 이동하고 재귀 적으로 호출하여 이동의 가치를 평가하고 최상의 이동을 선택할 수 있습니다.
검은 색과 흰색의 역할을 교환하여 상대 플레이어의 "위험"을 평가하는 것과 동일한 기능을 플레이어 블랙에 호출해야합니다.
그런 다음 다시 등 백인에 대한
그냥 당신이 재귀 수준에 너무 깊이 가지 말았어야하거나 영원히 걸릴 것 알고.
감사합니다. 각 이동의 가치에 대한 좋은 논리를 찾아야합니다. – JDelage
마음 dynamic programming, 같은 보드로 이어질 여러 조합을 가지고, 당신이 재귀를 감지하면 당신이이 곳으로 당신을 이끌 계산
를 반복하지 않도록하기 위해 이동을 캐시 기억해야 그 전화 끊어. 이것은 backtracking
으로 알려져 있습니다. 나무와 관련이 있습니다. –
내 첫 번째 Java 프로그램 중 하나는 (1998 년) Laplace가 아래에 언급 한 재귀 minimax 알고리즘을 사용하는 체스 재생 프로그램이었습니다. 확실히 Java와 재귀를 배우는 흥미로운 프로젝트입니다. – Jesper
www.m-w.com은 재귀가 유효한 영어 단어가 아니라고 말합니다. 수정 된 제목. –