Java50道经典习题-程序21 求阶乘

题目:求1+2!+3!+...+20!的和
分析:使用递归求解
0的阶乘和1的阶乘都为1

public class Prog21{
    public static void main(String[] args){
        long sum=0L;
        for(int i=1;i<=20;i++) {
            sum+=factorial(i);
        }
        System.out.println(sum);
    }
    //递归求阶乘
    public static long factorial(int n) {
        if(n==0||n==1) {//当n==0或者1时,返回0或1的阶乘1
            return 1;
        }
        return n*factorial(n-1);
    }
}
/*运行结果
2561327494111820313
*/

原文地址:https://www.cnblogs.com/parkour1026/p/10796780.html

时间: 2024-07-31 10:08:07

Java50道经典习题-程序21 求阶乘的相关文章

Java50道经典习题-程序9 求完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 1 public class Prog9 { 2 public static void main(String[] args) { 3 int n=1000; 4 compNumber(n); 5 } 6 //求完数 7 private static void compNumber(int n) { 8 System.out.println(n+"以内的完数:&q

Java50道经典习题-程序20 求前20项之和

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.分析:请抓住分子与分母的变化规律.三个连续分数之间的规律是:上两个分子之和等于第三个分数的分子,上两个分母之和等于第三个分数的分母 1 public class Prog20{ 2 public static void main(String[] args){ 3 double n1 = 1; 4 double n2 = 1; 5 double fraction = n1/n2; 6 dou

Java50道经典习题-程序11 求不重复数字

题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 1 public class Prog11 { 2 public static void main(String[] args) { 3 int count=0; 4 int n=0; 5 for(int i=1;i<5;i++) { 6 for(int j=1;j<5;j++) { 7 if(i==j) 8 con

Java50道经典习题-程序22 递归求阶乘

题目:利用递归方法求5!.分析:递归公式:n*factorial(n-1); 1 public class Prog22 { 2 public static void main(String[] args) { 3 System.out.println(factorial(5)); 4 } 5 //递归求阶乘 6 public static long factorial(int n) { 7 if(n==0||n==1) { 8 return 1L; 9 } 10 return n*factor

Java50道经典习题-程序13 根据条件求数字

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?分析:完全平方数:如果一个数能是由两个相同的数相乘的结果,那么这个数就是完全平方数,例如:9==3*3:9就是完全平方数.在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果. 1 public class Prog13 { 2 public static void main(String[] args) { 3 int n=0; 4 for

Java50道经典习题-程序8 输入数字求和

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 分析:关键是计算出每一项的值. 1 import java.util.Scanner; 2 public class Prog8{ 3 public static void main(String[] args){ 4 System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值:");

Java50道经典习题-程序12 计算奖金

题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:    利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:    20万到40万之间时,高于20万元的部分,可提成5%:    40万到60万之间时高于40万元的部分,可提成3%:    60万到100万之间时,高于60万元的部分,可提成1.5%,    高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 分析:请利用数轴来

Java50道经典习题-程序10 自由落体

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 1 import java.util.Scanner; 2 public class Prog10 { 3 public static void main(String[] args) { 4 System.out.println("请输入小球落地时的高度和求解的次数:"); 5 Scanner scan=new Scanner(System.in); 6

Java50道经典习题-程序18 乒乓球赛

题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单. a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单.分析:如果是人经过逻辑推理可以很快的得到结论.但是计算机处理此问题,不可能立即得出结论,而必须对每一种组合一一验证,找出符合条件的组合. 假设甲队a,b,c的对手分别是i,j,k i,j,k互不相等并且分别都是乙队x,y,z中的一人 利用三重for循环保证i,j,k互不相等 再将题设条件“a说他不和x比,