用递归的方法实现，显然当n很大时会超时，并且溢出