Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归的不同风格,引用/全局/指针变量的使用_Java_C++_Algorithm_Recursion_Dynamic Programming - Fatal编程技术网

Java 递归的不同风格,引用/全局/指针变量的使用

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

有些递归解决方案只能通过使用引用类型变量(或C/C++中的指针)或使用全局/成员变量来实现

我觉得纯递归函数不应该修改全局状态

这种递归解决方案(在记忆中,我们只缓存)有什么具体的名称吗?我们能把它们转换成更自然的递归类型吗

用于二叉树中的最大和问题。

您可以看到,我们在调用中使用了
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);
您将看到实际上不需要可变变量