在过去的几天里,我一直都在想办法设置这种递归方法的正确方法。我在堆栈溢出中发现了另一篇文章,指出了正确的方向,但不知道如何完成它。
在人类金字塔中,体重在世界各地的不同人群之间分布不均
金字塔。例如,人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) ;
}
}