java - 在递归中传递对象参数有更有效的方法吗?

标签 java recursion

我想在 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/

相关文章:

java - Morphia-CodecConfigurationException : Can't find a codec for class - But class is registered

java - 如何在 GWT 中实现 JQueryUI slider

java - 指向java中等效指针的指针

c++ - 使用递归算法在 OpenCV 中进行连通分量标记

javascript - 没有 sort() 的组合算法

java - Java 中的 native 库位置

java - 如何为仅包含对下一个节点的引用的节点实现HashCode()?

python - 设置属性导致超过最大递归深度

c - 想要在 c 中打印矩阵元素的组合

php - 递归功能 block 的最后一条语句执行了多少次?