求1+2+3+4+。。。+9999+10000用递归实现

今天被公司拉去南航做面试,笔试如题,唉,一想应该就是一个递归搞定撤,可惜出栈益出了。以前没接触过,现在才知道要控制递归层数。两层实现如下,不过数据大了也一样,还有等解进。
/**
 * @author Fish Yu   
 * @date 2009-11-18    
 * @version 1.0
 *   
 */
public class Recursion {

	/**
	 * @param args   
	 */
	public static void main(String[] args) {
		System.out.println(Recursion.sum(10000));

	}
	
	public static int sum(int num){
		int t = num/1000;
		int last = num%1000;
		return sumStepShousand(t,last,1000);
	}

	public static int sumStepShousand(int baseTime,int remainder,int baseNum) {
		if (baseTime >= 0 ) {
			if(remainder != 0) return sum2(baseTime,remainder,baseNum) + sumStepShousand(baseTime - 1,baseNum,baseNum);
			else return sum2(baseTime,0,baseNum) + sumStepShousand(baseTime - 1,baseNum,baseNum); // 调用递归方法
		} else return 0;
	}
	public static int sum2(int baseTime,int remainder,int baseNum) {
		if (remainder > 0) {
			return baseNum * baseTime + remainder + sum2(baseTime,remainder -1,baseNum); // 调用递归方法
		} else {
			return 0;
		}
	}
}

你可能感兴趣的:(面试)