public class SplitMoney { int[][] table = new int[5][3001]; public static void main(String[] args) { int[] arr = new int[]{5,10,25,1}; int aim = 3000;
        SplitMoney splitMoney = new SplitMoney(); long time1= System.currentTimeMillis();
        System.out.println(splitMoney.splitSearchTable(arr,0,aim)); long time2= System.currentTimeMillis();
        System.out.println("search table method time (ms):"+(time2-time1));

        time1= System.currentTimeMillis();
        System.out.println(splitMoney.splitRecursive(arr, 0, aim));

        time2= System.currentTimeMillis();

        System.out.println("recursive method time (ms):"+(time2-time1));


    } public int splitRecursive(int[] arr,int start,int aim){ if(arr==null|| arr.length==0 || aim<=0){ return 0;
        } return splitProcess(arr,start,aim);
    } public int splitProcess(int[] arr,int start,int aim){ int sum =0; if(aim==0){ return 1;
        } if(start==arr.length){ return 0;
        } else{ while(aim>=0){
                sum+=splitProcess(arr, start + 1, aim);
                aim = aim-arr[start];
            }
        } return sum;
    } public int splitSearchTable(int[] arr,int start,int aim){ if(arr==null|| arr.length==0 || aim<=0){ return 0;
        } return splitProcess1(arr, start, aim);
    } public int splitProcess1(int[] arr,int start,int aim){ int sum =0; if(aim==0){ table[start][aim]=1; return 1;
        } if(start==arr.length){ return 0;
        } else{ while(aim>=0){ if(table[start][aim]!=0){
                    sum += table[start][aim];
                } else {
                    sum += splitProcess1(arr, start + 1, aim);
                }
                aim -=arr[start];
            }
        } if(aim>=0){ table[start][aim] = sum;
        } return sum;
    }


}
分钱的那道题:

为什么我的程序跑出来的结果是:
3681531
search table method time (ms):13912
3681531
recursive method time (ms):3049

按照常理来讲应该记忆化搜索比暴力递归的时间要短啊。谁能帮我看一看这个是为什么?