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
利用图4next
和locals
命令可以看出递归内部的变化