此处是java的BST代码
public class BST<Key extends Comparable<Key>,Value>{ private Node root ; private class Node{ private Key key; private Value val; private Node left,right; private int n; public Node(Key key, Value val , int n){ this.key=key ; this.val=val; this.n=n; } } public int size(){ return size(root); } private int size(Node x){ if(x==null) return 0 ; else return x.n; } public Value get(Node x, Key key){ if(x==null) return null; int cmp = key.compareTo(x.key); if(cmp<0) return get(x.left,key); else if(cmp>0) return get(x.right,key); else return x.val; } public Value get(Key key){ return get(root,key); } public void put(Key key , Value val){ root = put(root,key,val); } public Node put(Node x ,Key key , Value val){ if(x==null) return new Node(key,val,1); int cmp = key.compareTo(x.key); if(cmp<0) x.left = put(x.left,key,value); else if(cmp>0) x.right =put(x.right , key value); else x.val = val; x.n=size(x.left)+size(x.right)+1; return x; } }
1我想知道,方法put
和get
都是递归函数吗?
对我来说,为什么x.left=put(x.left,key,val)
?我可以删除x.left=
或将其替换为return put(x.left,key,val)
吗?
2我想知道,在递归函数中,返回语句是必要的吗? 例如在斐波那契
`public static int recursiveFactorial(int n){
if (n == 1) return 1;else return n * recursiveFactorial(n-1);
} `
我可以删除第二个return
吗?
答案 0 :(得分:0)
为什么要删除代码?如果代码来自Java源代码,那么它可能已处于最不冗余的阶段。删除代码可能会破坏它。
return语句将返回该函数旨在查找的变量。
public static int recursiveFactorial(int n) {
if (n == 1) {
return 1;
} else {
return n * recursiveFactorial(n - 1);
}
}
public static int recursiveFactorial(int n){..}
int decalres函数在调用时将返回一个整数值。它有一个int参数,只接受一个整数。然后它执行并返回一个新的整数。
int n = recursiveFactorial(5);
递归函数有两个部分 - 基本案例和递归案例。当用一个数字调用该函数时,比如5,它将继续调用自己直到它到达基本情况(1)
recursiveFactorial(5) - &gt; recursiveFactorial(4) - &gt; recursiveFactorial(3) - &gt; recursiveFactorial(2) - &gt; recursiveFactorial(1) - &gt;返回1 - &gt;返回2 * 1 - &gt;返回3 *(2 * 1) - &gt;返回4 *(3 * 2 * 1) - &gt;返回5 *(4 * 3 * 2 * 1)= 120