万水千山走过

导航

求前n项数的阶乘求和(包括0)

/*思路:由目标式子可见分为两个部分。一个为每一项求阶乘数,另外一个为求和。所以写两个方法就可以解决。*/
public class PracticeDemo {
	//递归方法求每一位的阶乘,返回为该数的阶乘。从1开始
	 public static long Recursion(int a)
	 {  
		long  value = 0;
		if(1 == a )
		{
		    value = 1;
		}
		else if(1 < a)
		{
		    value = a * Recursion(a-1);
		}
		return value;
	 }
	 //阶乘求和从0到b的阶乘之和
	 public static long Summation(int b)
	 {
		 long Sum = 0;
		 if(0 > b)
		 {
		      return -1;
		 }
		 else 
		 {
			 while(0 < b)
			 {
			      System.out.print(b+"!+");
			      Sum += Recursion(b);
			      b--;	
			 }
			 System.out.print("0!=");
			 return Sum+1; //加上0的阶乘
		  } 
	  }
	public static void main(String[] args)  {
		Scanner input  = new Scanner(System.in);
		System.out.println("请输入你要求的目标数:");
		int a  = input.nextInt();
		PracticeDemo trf = new PracticeDemo();
		System.out.println(trf.Summation(a));
   } 
}
//改进方法
/*此方法利用一个for循环。时间复杂度为O(n)。在循环里面两个变量,一个用于每次i++成为下一个数的阶乘;另一个为求和变量*/
Scanner input  = new Scanner(System.in);
  System.out.println("请输入你要求的目标数:");
  int a  = input.nextInt();
  int temp = 1;
  int sum = 0;
  for(int i = 1;i <= a;i++)
  {
      temp *= i; //用于计算每一个阶乘
      sum += temp ; //阶乘累加
   System.out.print(i+"!+");
  }
  System.out.println("0="+sum);

  

posted on 2020-02-16 12:57  万水千山走过  阅读(520)  评论(0编辑  收藏  举报