我想在 Java 中进行递归,传递对象参数。像这样:
int recursion(Object object)
{
//do a little bit modification to the object
int i1= recursion(modified_object_1);
//do a little bit modification to the object
int i2= recursion(modified_object_2);
//do a little bit modification to the object
int i3= recursion(modified_object_3);
return max(i1, i2, i3);
}
现在,因为对象是通过引用传递的,所以我必须将对象参数克隆 3 次并将克隆的对象传递给下一个递归。但是,这可能非常低效,因为我正在执行数万次递归并且对象结构复杂。除了克隆对象之外,还有更有效的方法吗?
谢谢~
最佳答案
首先,关于按值和引用传递的一些清晰度(OP 对此似乎很清楚,但评论者似乎很困惑)。 Java 对象在传递给函数时不会自动克隆 - 对象的引用按值传递 - 更改函数中的对象将改变调用上下文中的对象。
因此 OP 正确地计划要运行他的算法,他需要首先克隆对象,然后使用克隆的副本向下传递递归函数链。
然而,在某些情况下,还有另一种可以轻松实现的可能性:
int recursion(Object object)
{
//do a little bit modification to the object
int i1= recursion(object);
//undo the modification to the object
//do a little bit modification to the object
int i2= recursion(object);
//undo the modification to the object
//do a little bit modification to the object
int i3= recursion(object);
//undo the modification to the object
return max(i1, i2, i3);
}
在可能的情况下(例如,在搜索游戏决策树时选择可能的着法时),它的工作效率要高得多。
请注意,最后一次撤消更改是必需的,否则堆栈上层的对象将会出错。
关于java - 在递归中传递对象参数有更有效的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715068/