求前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);