数组中的Java递归 - 从数组[0]到数组[length-1]的查找路径

时间:2018-01-08 14:29:22

标签: java arrays recursion path

我正在尝试编写递归方法,如果有一个从[0]到[a.length-1]的路径,当你可以求和或减去a [i]时返回true。 例如,在数组a = {2,4,1,6,4,2,4,3,5}中,该方法返回true,因为0 + 2-1 + 4 + 2-3 + 4 = 8 = a [a 。长度-1]。 我尝试了几种方法,但是我发现堆栈溢出或输出错误。

public static boolean isWay(int[] a){

return isWay(int[] a, int ind, int way)
}

private static boolean isWay(int[] a, int ind, int way){
   if(way==0)
   return true;
   if(way > a.length-1, || way < 0 )
   return false;
   if(ind > a.length-1 || ind < 0)
   return false;

   return isWay(a, ind+a[ind], way-a[ind]) || isWay(a, ind-a[ind],way+a[ind]);
}

2 个答案:

答案 0 :(得分:0)

试试这段代码。它搜索从开头(索引0)到结尾(索引a.length-1)的方式。

public static void main(String[] args) {
    System.out.println(isWay(new int[] {2,4,1,6,4,2,4,3,5}, 0));
    System.out.println(isWay(new int[] {2,7,3,8,5,1,2,1,2}, 0));
    System.out.println(isWay(new int[] {7,7,7,7}, 0));
}

public static boolean isWay(int[] a, int index) {
    if (index == a.length-1) return true;
    if (index > a.length-1 || index < 0) return false;
    return isWay(a, index+a[index]) || isWay(a, index-a[index]);
}

答案 1 :(得分:0)

    public static boolean isWay(int[] a)
{
    return isWay(a,0);
}
private static boolean isWay(int[] a, int ind)
{
    if  (ind < 0 || ind>a.length-1)
        return false;
    if  (a[ind]<0)
        return false;
    if  (ind == a.length-1)
        return true;
    int tmp = a[ind];
    a[ind] = -1;
    return  isWay(a, ind+tmp) || isWay(a, ind-tmp);
}