在学校寻找Java作业的帮助,我正在尝试创建一个解决以下难题的递归算法:
给定一个起始位置和一个长度为n的数组,其中n-1个正数,数组的最后一个位置为0,例如:
{4 8 5 2 3 5 1 6 4 0}
游戏规则:
从起始位置向右移动等于值@ starting 位置,重复,直到你不能再向右移动。
一旦你无法再向右移动,以类似的方式向左移动 当你向右移动并停止一旦你不能再移动到 左
现在继续重复这个过程。
当你移动了最后一个位置时,这个难题就会被解决 数组保持值为0.
否则这个谜题是无法解决的。
我必须使用递归来解决这个难题,我已经提出了算法,但输出我变得假,即使拼图是可以解决的。
这是我的算法:
static boolean rightWing(int[] A, int i) //i = starting position
{
int left=i;
int right=A.length-i-1;
if (A[i]<right)
{
i=i+A[i];
rightWing(A, i);
}
if (A[i]<left)
{
i=i-A[i];
rightWing(A,i);
}
if (right==A[i])
return true;
else
return false;
}
答案 0 :(得分:0)
试试这个,
static boolean rightWing(int[] A, int i) //i = starting position
{
int left=i;
int right=A.length-i-1;
if (A[i]<right)
{
i=i+A[i];
return rightWing(A, i);
}
if (A[i]<left)
{
i=i-A[i];
return rightWing(A,i);
}
if (right==A[i])
return true;
else
return false;
}
注意在对rightWing的递归调用之前的返回。你需要这个,否则你的方法将总是返回第一次调用的右= = A [i]的结果。