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我想知道,方法put
和get
都是递归函数吗?
对我来说,为什么?我可以删除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 楼答案
你到底为什么要删除代码?如果代码来自Java源代码,那么它可能已经至少处于冗余阶段。删除代码可能会破坏它
return语句将返回函数设计用于查找的变量
公共静态intrecursiveFactorial(intn){..}
int表示函数在调用时将返回一个整数值。它有一个int参数,只接受整数。然后执行并返回一个新的整数
递归函数有两部分——基本情况和递归情况。当用数字调用函数时,比如说5,它将继续调用自己,直到到达基本情况(1)
递归阶乘(5)->;递归阶乘(4)->;递归阶乘(3)>;递归阶乘(2)->;递归阶乘(1)->;返回1->;返回2*1->;返回3*(2*1)->;返回4*(3*2*1)->;返回5*(4*3*2*1)=120