使用jGrasp可视化递归

时间:2015-09-02 16:05:14

标签: java graphics draw jgrasp

我喜欢用图形方式看它是如何运作的

 public boolean splitArray(int[] nums) {
    int index = 0;
    int sum1 = 0;
    int sum2 = 0;

    return recallArray(nums, index, sum1, sum2);

}

public boolean recallArray(int[] nums, int index, int sum1, int sum2){
    if(index >= nums.length){
        return sum1 == sum2;
    }
        int value = nums[index];
        return recallArray(nums,index + 1, sum1 + value,sum2) 
        || recallArray(nums,index + 1, sum1 ,sum2 + value);
}

我尝试使用Jgrasp,它有一个很好的可视化调试器,但它只显示变量如何通过递归调用进行更改,Jgrasp可以执行递归树或类似的东西吗?,怎么做?

1 个答案:

答案 0 :(得分:0)

你可以通过一个利用try-with-resources的类(RACheck)来自己完成。

public boolean recallArray(int[] nums, int index, int sum1, int sum2) {
    try (new RACheck(nums, index, sum1, sum2)) {
        if (index >= nums.length) {
            return sum1 == sum2;
        }
        int value = nums[index];
        return recallArray(nums,index + 1, sum1 + value,sum2) 
            || recallArray(nums,index + 1, sum1 ,sum2 + value);
    }
}

class RACheck implements Autocloseable {
    static int recursionDepth;
    int myRecursionDepth;

    final int[] aliasToNums;
    final int[] copyOfNums;

    RAChec(int[] nums, int index, int sum1, int sum2) {
        myRecursionDepth = recursionDepth++;
        // copy initial values.
        this.aliasOfNums = nums;
        this.copyOfNums = Arrays.copyOf(nums, nums.length);
        // dump enter method
    }

    @Override
    public void close() {
        // dump leave method
        // highlight changes to nums
    }
}