我正在用类编写递归方法。我根本没有得到我想要的输出。
public Result foo( cell, Result R )
{
grid = createGrid( cell )
if (grid.empty )
return;
else
{
// find best 2 cell.
best_cells[] = findBestCell( grid );
// saves best R found so far.
R = updateResult( R );
// call foo( best_cells[] );
for ( every cell in best_cells[] )
return foo( best_cells[i], R );
}
return R;
}
该方法在第一次条件if(grid.empty)
为true
时发出白蚁。它不适合其他细胞!这是为什么?我错过了回归吗?
更新1: 谢谢托马斯的笔记。我将代码更改为:
public Result foo( cell, Result R )
{
grid = createGrid( cell )
if (grid.empty )
return R;
else
{
// find best 2 cell.
best_cells[] = findBestCell( grid );
// saves best R found so far.
R = updateResult( R );
// call foo( best_cells[] );
for ( every cell in best_cells[] )
{
Result temp_R = foo( best_cells[i], R );
if( temp_R.error < R.error )
R = temp_R;
}
}
return R;
}
我会测试它,然后回复你们。
更新2:以前的代码现在运行正常。第一个输入R不能是== null。否则会出现NPE。
非常感谢托马斯!谢谢你的评论:)
答案 0 :(得分:0)
如果没有更多信息和可编译的代码,很难说出你的错误在哪里。 但这里有一些提示:
if (grid.empty )
return;
这里应该归还什么? R
作为参数传递了吗?
for ( every cell in best_cells[] )
return foo( best_cells[i], R );
这将在第一次迭代后停止(best_cells[1]
并且永远不会检查更高的值。我想你想以某种方式检查foo( best_cells[i], R )
的结果,然后决定是返回它还是继续迭代。
作为一般性说明:如果您要求我们在您的代码中查找错误(而不仅仅是检查某些算法),您应该发布该代码而不是一些伪代码。否则,几乎不可能发现任何实际的错误。
另一个注意事项:你知道如何使用调试器吗?如果是这样,请检查一下您的代码执行的操作以及您希望它执行的操作。很可能你会很快找到出错的部分。