在过去的几天里,我一直都在想办法设置这种递归方法的正确方法。我在堆栈溢出中发现了另一篇文章,指出了正确的方向,但不知道如何完成它。

在人类金字塔中,体重在世界各地的不同人群之间分布不均
金字塔。例如,人A没有负担。如果我们假设我们每个人
金字塔重200磅,那么人B和人C各自承担人A的一半重量(100
磅)。 E人直接支撑B人一半的体重(100磅),而E人一半重量(100磅),因此她至少支撑200磅。此外,她负担的是B和C人的一半,因此多了100磅。

Full program description here.

这是我到目前为止的内容:

public int weightOn(int row, int column) {
    // Base cases
    if (row <= 0) {
        return 0;
    } else if (column < 0 || column > row) {
        return 0;
    }

    return (200 + (weightOn(row - 1, column - 1) + weightOn(row - 1, column))) / 2;
}


该程序适用于金字塔的前2行以及所有附带人员,例如:weightOn(0,0)= 0,weightOn(1,0)= 100,weightOn(2,0)= 150,但是当我运行weightOn(2,1)我得到200,当它应该是300时,或者weightOn(3,1)当它应该是425时返回275。

最佳答案

我会使用另一种方法。
只需定义一个在图表中呈现节点的类即可。
该节点中的每个节点都可以具有(或不基于该节点的代表)指向其他节点的链接(如二进制图中的最小0,最大2)。
因此,现在定义weightOn函数非常简单。
节点的权重为

public int weightOn() {
    return 200 + leftNodeParent.weightOn()/2 + rightNodeParent.weightOn()/2 ;
}


基本上,您将获得对weightOn()方法的递归调用。

编辑:
这应该做的工作

public static void main(String []args){
    Node a = new Node(null, null);
    Node b = new Node(null, a);
    Node c = new Node(a, null);
    System.out.println(c.weightOn());


 }

public class Node {
    Node leftParent;
    Node rightParent;
    public Node(Node left, Node right){
        this.leftParent = left;
        this.rightParent = right;
    }
    public int weightOn() {
        int leftWeight = leftParent != null ? leftParent.weightOn()/2 : 0;
        int rightWeight = rightParent != null ? rightParent.weightOn()/2 : 0;
        return (200 + leftWeight + rightWeight) ;
    }
}

10-04 13:13