Java 递归的不同风格,引用/全局/指针变量的使用
有些递归解决方案只能通过使用引用类型变量(或C/C++中的指针)或使用全局/成员变量来实现 我觉得纯递归函数不应该修改全局状态 这种递归解决方案(在记忆中,我们只缓存)有什么具体的名称吗?我们能把它们转换成更自然的递归类型吗 用于二叉树中的最大和问题。 您可以看到,我们在调用中使用了Java 递归的不同风格,引用/全局/指针变量的使用,java,c++,algorithm,recursion,dynamic-programming,Java,C++,Algorithm,Recursion,Dynamic Programming,有些递归解决方案只能通过使用引用类型变量(或C/C++中的指针)或使用全局/成员变量来实现 我觉得纯递归函数不应该修改全局状态 这种递归解决方案(在记忆中,我们只缓存)有什么具体的名称吗?我们能把它们转换成更自然的递归类型吗 用于二叉树中的最大和问题。 您可以看到,我们在调用中使用了max[0]=Math.max(max[0] public int maxPathSum(TreeNode root) { int max[] = new int[1]; max[0
max[0]=Math.max(max[0]
public int maxPathSum(TreeNode root) {
int max[] = new int[1];
max[0] = Integer.MIN_VALUE;
calculateSum(root, max);
return max[0];
}
private int calculateSum(TreeNode root, int[] max) {
if (root == null)
return 0;
int left = calculateSum(root.left, max);
int right = calculateSum(root.right, max);
int current = Math.max(root.val, Math.max(root.val + left, root.val + right));
max[0] = Math.max(max[0], Math.max(current, left + root.val + right));
return current;
}
全局/参考值是完全不必要的。它是原始实现(C)的编程语言中的一个缺陷的产物,在这种情况下,返回一对值在语法上是不方便的
我不太了解java,知道它是否有一个通用的类类,像C++一样,但是你总是可以使用一个有两个整数成员的类。 尝试使用以下原型重写递归函数:
Pair<int, int> walk(Treenode root, int maxpath);
pairwalk(treenoderoot,int-maxpath);
您将看到实际上不需要可变变量