-1
나는 반지 수에 따라 하노이 타워 경기에서 만족할만한 최소 이동 수를 반환하는 방법을 연구하고 있습니다. 지금까지 2^n (n은 반지 수)을 계산할 수있는 기본 코드가 있습니다. 그러나, 1을 뺄 때, 메소드는 마치 고리가없는 것처럼 행동합니다.자바에서 재귀를 사용하여 하노이 타워의 최소 이동 횟수 계산하기
static int countHanoiMoves(int n)
{
int unSubtrctAnswer = 0;
if(n == 0)
{
return 1;
}
int halfPower = countHanoiMoves(n/2);
if (n % 2 == 1)
{
unSubtrctAnswer = (2 * halfPower * halfPower);
}
else
{
unSubtrctAnswer = (halfPower * halfPower);
}
return unSubtrctAnswer - 1;
}
'countHanoiMoves (0) = 1'. 응? ---'countHanoiMoves (1) = 1'. 승인. ---'countHanoiMoves (2) = countHanoiMoves (1)^2 - 1 = 1^2 - 1 = 1 - 1 = 0'. 응? 당신은 정말로 당신의 논리를 다시 생각해야합니다. – Andreas
BTW, [솔루션] (http://mathworld.wolfram.com/TowerofHanoi.html)은 '2ⁿ-1', 일명'countHanoiMoves (int n) {return (1 << n) - 1; }' – Andreas