java - 如何在 Markov Chain W/O runtine 错误中编写递归调用
问题描述
所以这是我从主调用的方法。第一部分只是将方法相乘。得到错误的是返回和第 121 行。我强调了得到错误的行。我想将通过 m 和 m2 与 m(原始矩阵)相乘创建的矩阵不断地相乘。应该阻止它永远运行的是将在 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
这是错误,它会数千次打印第 131 行错误。
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)
解决方案
while 循环没有机会,因为您在任何情况下都执行(v = 0)
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
推荐阅读
- python - 过滤两个日期之间的数据 - Django
- spring-boot - GCP Dialogflow Java-SpringBoot 身份验证-应用程序默认凭据不可用
- python - XPath 增量与 Python
- javascript - 我在猫鼬中创建新数据时遇到问题,因为我总是得到代码 11000
- testing - 在 LocalDateTime 上使用 @RestClientTest 进行测试时,RestTemplate 的行为有所不同
- javascript - javascript ile链接çektirme
- vulkan - 是否可以选择 Vulkan 计算着色器从一组数据的哪一部分开始?
- django - 嵌套 JSON 文件中的 DjangoFilterBackend 过滤器
- javascript - 运行 yarn install 时出现 ENOTFOUND registry.yarnpkg.com 错误
- kdb - 访问 kdb+/Q 中的子文件夹