Java 如何在马尔可夫链中编写递归调用而不出现运行时错误

Java 如何在马尔可夫链中编写递归调用而不出现运行时错误,java,recursion,markov-chains,markov,Java,Recursion,Markov Chains,Markov,下面是我从main调用的方法。第一部分只是将这些方法相乘。它是获取错误和第121行的返回。我将得到错误的行放大。我想用m和m2的乘积乘以,原来的矩阵。应该阻止它永远运行的是将在4停止的while循环。我知道这可能不是最好的办法。 电话是这样的: System.out.println(m.rec(m2)); m和m2是克隆 public Matrix rec(Matrix m2) throws Exception{ try{ int v = 0; whil

下面是我从main调用的方法。第一部分只是将这些方法相乘。它是获取错误和第121行的返回。我将得到错误的行放大。我想用m和m2的乘积乘以,原来的矩阵。应该阻止它永远运行的是将在4停止的while循环。我知道这可能不是最好的办法。 电话是这样的:

System.out.println(m.rec(m2));
m和m2是克隆

public Matrix rec(Matrix m2) throws Exception{
    try{
        int v = 0;
        while(v < 4){
        if(c!=m2.r){
            System.out.println("Argh");
            throw new RuntimeException();
        }//if
        **m3=new Matrix(r, m2.c); LINE 121!!! <------ **
        for(int i=0; i<r; i++){
            for(int j=0; j<m2.c; j++){
                m3.data[i][j]=0;
                for(int k=0; k<c; k++){
                    m3.data[i][j]+= ( ( data[i][k]) )  *  (m2.data[k][j]);
                }//k
            }//j
        }//i
        v++;
        ** return m2.rec(m3); //LINE 131 <-------------**
        }//while
    }//try
    catch(Exception ex){
        System.out.println("Argh");
    }//catch
    return m2;
}//multiply

while循环没有机会,因为在任何情况下都会执行(v=0)

返回m2.rec(m3)//第131行(第4行){
返回m2;
}
int v=0;
而(v<4){
如果(c!=m2.r){
系统输出打印项次(“Argh”);
抛出新的RuntimeException();
}//如果

**m3=新矩阵(r,m2.c);第121行!!!while循环没有机会,因为在任何情况下都会执行(v=0)

返回m2.rec(m3);//第1314行){
返回m2;
}
int v=0;
而(v<4){
如果(c!=m2.r){
系统输出打印项次(“Argh”);
抛出新的RuntimeException();
}//如果

**m3=新矩阵(r,m2.c);第121行!!!非常感谢您的帮助非常感谢您的帮助
Exception in thread "main" java.lang.StackOverflowError
    at markovchain.Matrix.rec(Matrix.java:121)
    at markovchain.Matrix.rec(Matrix.java:131)
    at markovchain.Matrix.rec(Matrix.java:131)
return m2.rec(m3); //LINE 131 <-------------**
public Matrix rec(Matrix m2, int level) throws Exception{
    try{
        if (level > 4) {
            return m2;
        }
        int v = 0;
        while(v < 4){
        if(c!=m2.r){
            System.out.println("Argh");
            throw new RuntimeException();
        }//if
        **m3=new Matrix(r, m2.c); LINE 121!!! <------ **
        for(int i=0; i<r; i++){
            for(int j=0; j<m2.c; j++){
                m3.data[i][j]=0;
                for(int k=0; k<c; k++){
                    m3.data[i][j]+= ( ( data[i][k]) )  *  (m2.data[k][j]);
                }//k
            }//j
        }//i
        v++;
        ** return m2.rec(m3, level +1); //LINE 131 <-------------**
        }//while
    }//try
    catch(Exception ex){
        System.out.println("Argh");
    }//catch
    return m2;
}//multiply