我喜欢用图形方式看它是如何运作的
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可以执行递归树或类似的东西吗?,怎么做?
答案 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
}
}