20165334 第二次测试分析

第一次测试分析

1、p29

2、p45

3、递归循环

参考博客 编程实现1!+2!+3!+... + N!的功能N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值

解决方案:

  以前只是说大家只要记住main方法的写法,现在要能深入理解了,“public static void”是什么意思要清楚。我们这里要说的是main方法的参数 String [] args. args是一字符串数组,它是从哪里来的?Java程序运行时,会调用main方法,args就是命令行参数。

-- 引用自娄老师博客

在知道 String [] args. args是一字符串数组利用Integer.parseint()将字符串类型转化为需要的整数类型实现需求,但是int类型长度有限满足不了我的学号5334!,于是我用另外一种方式实现算法。

方法1:N由键盘输入

代码如下

import java.util.Scanner;

public class jiechengOne {
    public static void main(String[] args) {
        long sum = 0;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入n:");
        int n = scanner.nextInt();
        if (n < 0) {
            System.out.println("请输入大于0的数");
        }
        for (int i = 1; i <= n; i++) {
            sum += fact(i);
        }
        if(n>0)
            System.out.println("1!+...+"+n+"!="+sum);
        else
            System.out.println("0!="+1);

    }

    public static long fact(int t) {
        if (t == 0)
            return 1;
        else
            return t * fact(t - 1);
    }
}

方法2:N由命令行输入

public class jiechengtwo {
    public static void main(String args[]) {
        int n, sum = 0;
        n= Integer.parseInt(args[0]);
        System.out.println("n(n>=0)");
            for (int i = 1; i <= n; i++) {
                sum += fact(i);
            }
            if(n>0)
            System.out.println("1!+...+"+n+"!="+sum);
            else
            System.out.println("0!="+1);
        }
        public static long fact(int a) {
            if(a == 0)
                return 1;
            else
                return a*fact(a-1);
        }
}
运行截图

4、JDB调试(第三题的程序)

截图

图1

图2

图三

图4
利用图4nextlocals命令可以看出递归内部的变化

posted @ 2018-03-24 14:34  litianlong  阅读(141)  评论(3编辑  收藏  举报