如图,怎么根据前2列,得出递归的值呢? |
|
40分 |
直接上代码:
package test; import java.util.ArrayList; import java.util.List; public class Main { public static int mul(Node n,int total){ if(n.lever==0){ return total; }else{ return total*mul(n.parent,n.value); } } public static void main(String[] args) { Node n1 = new Node(3,Node.root); Node n21 = new Node(2,n1); Node n22 = new Node(3,n1); Node n3 = new Node(5,n22); System.out.println(mul(n1,1)); System.out.println(mul(n21,1)); System.out.println(mul(n22,1)); System.out.println(mul(n3,1)); } public static class Node{ int lever; int value; List<Node> child = new ArrayList<Node>(); Node parent; static final Node root = new Node(0, 1); private Node(int lever, int value) { super(); this.lever = lever; this.value = value; parent = null; } public Node( int value,Node parent) { super(); this.lever = parent.lever+1; this.value = value; this.parent = parent; parent.child.add(this); } } } 结果: |
思路
第n层的值an 第n-1层递归的值Yn-1 那么第n层递归值Yn = an * Yn-1 其实感觉这个应该是排列组合的知识,用不着递归,直接遍历“层级对应的值”就可以了 层级对应的值可以存Map<Integer,Integer> map中,循环的时候i=0;i<map.size;i++即可。 |
|
看到不是特别明白,能否用for循环,然后变量去做呢? |
|
构造节点代码应该看的懂吧。你前面说要递归的,我改了下递归或者for循环都可以的,结果是一样的。 package test; import java.util.ArrayList; import java.util.List; public class Main { public static int mul(Node n,int total){ //root节点返回 if(n==Node.root){ return total; }else{ //非root节点,递归。 return total*mul(n.parent,n.value); } } public static int mul(Node n){ int total = 1; for(;;n=n.parent){ //root节点返回 if(n==null){ break; }else{ total*=n.value; } } return total; } public static void main(String[] args) { Node n1 = new Node(3,Node.root); Node n21 = new Node(2,n1); Node n22 = new Node(3,n1); Node n3 = new Node(5,n22); System.out.println(mul(n1,1)); System.out.println(mul(n21,1)); System.out.println(mul(n22,1)); System.out.println(mul(n3,1)); System.out.println(mul(n1)); System.out.println(mul(n21)); System.out.println(mul(n22)); System.out.println(mul(n3)); } public static class Node{ int lever; int value; List<Node> child = new ArrayList<Node>(); Node parent; static final Node root = new Node(0, 1); private Node(int lever, int value) { super(); this.lever = lever; this.value = value; parent = null; } public Node( int value,Node parent) { super(); this.lever = parent.lever+1; this.value = value; this.parent = parent; parent.child.add(this); } } } |