Java递归的实现

234 阅读1分钟
  • 递归方式一、函数自己调用自己 factorial函数
  • 递归方式二、通过循环实现 factorial2函数
  • 超出运算能力了怎么办? factorial3函数

package cn.csx.demo03;

import java.math.BigInteger;

public class Test {

	public static void main(String[] args) {
		
		System.out.println(factorial(10)); // 如果是10000可能会抛出 java。lang.StackOverflowError异常
		
		System.out.println(factorial(10000)); // 0 超出运算能力
		
		System.out.println(factorial2(10000)); // 0 超出运算能力
		
		System.out.println(factorial3(1000)); // ok
	}
	
	// 递归方式一、函数自己调用自己
	public static long factorial(int n){
		if(n==0) {
			return 1;
		}else {
			return n*factorial(n-1);
		}
		
	}
	
	// 递归方式二、通过循环实现
	public static long factorial2(int n){
		long result = 1;
		for(int i=1;i<=n;i++) {
			result = result * i;
		}
		return result;
		
	}
	
	// 数据量大时
	public static BigInteger factorial3(int n) {
		BigInteger result = BigInteger.valueOf(1);
		for(int i = 1;i <=n;i++) {
			BigInteger i2 = BigInteger.valueOf(i);
			result = result.multiply(i2);
		}
		return result;
	}
}