有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

BST数据结构中的java递归差异

下面是由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=还是用return put(x.left,key,val)替换它

2我想知道,在递归函数中,return语句是必要的吗? 比如斐波那契

`public static int recursiveFactorial(int n){
  if (n == 1) return 1;else return n * recursiveFactorial(n-1);
 } `

我可以删除第二个return


共 (1) 个答案

  1. # 1 楼答案

    你到底为什么要删除代码?如果代码来自Java源代码,那么它可能已经至少处于冗余阶段。删除代码可能会破坏它

    return语句将返回函数设计用于查找的变量

    public static int recursiveFactorial(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * recursiveFactorial(n - 1);
        }
    }
    

    公共静态intrecursiveFactorial(intn){..}

    int表示函数在调用时将返回一个整数值。它有一个int参数,只接受整数。然后执行并返回一个新的整数

     int n = recursiveFactorial(5);
    

    递归函数有两部分——基本情况和递归情况。当用数字调用函数时,比如说5,它将继续调用自己,直到到达基本情况(1)

    递归阶乘(5)->;递归阶乘(4)->;递归阶乘(3)>;递归阶乘(2)->;递归阶乘(1)->;返回1->;返回2*1->;返回3*(2*1)->;返回4*(3*2*1)->;返回5*(4*3*2*1)=120