调试器跳过递归Java程序中的方法

时间:2019-01-02 14:45:54

标签: java recursion

我正尝试编写一个代码,该代码仅在用户给出的int Num为整数的情况下,才允许打印“步长”时打印在二维数组的单元格之间跳转所必须执行的最大步长。旁边的单元格。

我尝试调试,但是第return Q3(A , NUM ,0, 0,0)行跳过了命令

public class Ex14 {
    public static int longestSlope(int[][] A, int num) {

        return recursion(0, 0, A, num);
    }


    private static int recursion(int row, int col, int[][] A, int NUM) {
        if (col < A[0].length)
            return recursion(row, col + 1, A, NUM);
        if (row < A.length)
            recursion(row + 1, col, A, NUM);

        return Q3(A, NUM, 0, 0, 0);
    }


    private static int Q3(int[][] A, int NUM1, int ind1, int ind2, int Step) {

        if ((ind1 + 1) < A.length && A[(ind1 + 1)][(ind2 + 0)] == A[ind1][ind2] - NUM1)
            return Q3(A, NUM1, ind1 + 1, ind2, Step + 1);
        if ((ind1 - 1) > A.length && A[(ind1 - 1)][(ind2 + 0)] == A[ind1][ind2] - NUM1)
            return Q3(A, NUM1, ind1 - 1, ind2, Step + 1);
        if ((ind2 + 1) < A[0].length && A[(ind1 - 0)][(ind2 + 1)] == A[ind1][ind2] - NUM1)
            return Q3(A, NUM1, ind1, ind2 + 1, Step + 1);
        if ((ind2 - 1) > A[0].length && A[(ind1 + 0)][(ind2 - 1)] == A[ind1][ind2] - NUM1)
            return Q3(A, NUM1, ind1, ind2 - 1, Step + 1);
        else return Step; //if a cell next to current index is in the same slop move to that cell and add 1 step

    }
}

这里是测试人员:

public class Tester14 {

    public static void main() {

        /* Tester Question 3 */

        System.out.println("********** Question 3 **********\n");

        int[][] mat = {
            {
                3,
                13,
                15,
                28,
                30
            },
            {
                55,
                54,
                53,
                27,
                26
            },
            {
                54,
                12,
                52,
                51,
                50
            },
            {
                50,
                10,
                8,
                53,
                11
            }
        };

        int num = 1;
        System.out.println("Test1: num => 1");
        System.out.println("Expected result => 6, Student result = " +
            Ex14.longestSlope(mat, num) + "\n");


    }
}

2 个答案:

答案 0 :(得分:1)

我发现了2个问题:

  • 第3季度递归仅从第一行中的单元格开始, 最右边的列。它应该从每个单元格开始。因此,只需使用2 for循环而不是使用递归即可循环所有单元格(当然也可以这样做)。
  • if语句中的
  • 2个错误。请参阅下面if语句中的2中的<?php namespace App; use Illuminate\Database\Eloquent\Model; use Calendar; class Event extends Model { protected $fillable = [ 'event_name', 'event_color', 'start_date', 'end_date', ]; }

这两个问题已在此处解决:

>= 0

答案 1 :(得分:0)

我认为您需要重新考虑自己的策略。我猜你的代码没有按照你想要的去做。

这就是您的代码中发生的情况:由于第一个if语句(col),方法递归将首先对其自身进行五次调用,然后由于第二条if语句(行)将其进行五次调用。然后它将五次称为Q3(尽管乍一看我猜是十次)。 Q3中的所有if语句都不能真正满足Q3的要求(总是在0(步骤)上返回/回退。)

请说明“用户提供的int Num是它旁边的单元格的其余部分”。差异(cell1-cell2)是否必须等于Num?如果是这样,请修正样本矩阵,因为没有有效的路径,单元格之间的差为1(数字)。

还解释了跳跃的工作原理。它是否从特定位置开始和/或结束?可以朝任何方向(这里的答案可能是“是”)吗?