BST数据结构中的递归差异

时间:2015-09-22 11:50:36

标签: java algorithm binary-search-tree

此处是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我想知道,方法putget都是递归函数吗? 对我来说,为什么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吗?

1 个答案:

答案 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