long d1 = System.currentTimeMillis(); System.out.println("%d阶乘的结果:%s%n", 10, factorial(10)); long d2 = System.currentTimeMillis(); System.out.println("递归费时:%s%n", d2 - d1); } static long factorial(int n){ if(n == 1){ return 1; }else return n * factorial(n-1); }为什么运行不了
时间: 2023-12-19 12:06:31 浏览: 71
这段代码中的`System.out.println()`方法的格式字符串使用了C语言风格的格式化方式,应该使用Java的格式化方式。即用`%d`代替`%s`,代码应该修改为:
```
long d1 = System.currentTimeMillis();
System.out.printf("%d阶乘的结果:%d%n", 10, factorial(10));
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:%d%n", d2 - d1);
static long factorial(int n) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
```
这样就能正常运行了。
相关问题
public static void main(String[] args) { long startTime = System.currentTimeMillis(); int a = 10; int result = 1; while (a>1){ result *=a*(a-1); a-=2; } long endTime = System.currentTimeMillis(); System.out.println(result); System.out.printf("优化后的循环费时: %d ns%n", endTime - startTime); }优化
这段代码的问题在于它没有正确地计算阶乘,应该是 `result *= a;` 而不是 `result *= a*(a-1);`。另外,对于优化循环费时,可以考虑使用更高效的算法,如递归或者使用数学公式计算阶乘。以下是一个使用递归计算阶乘的示例代码:
```
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int n = 10;
int result = factorial(n);
long endTime = System.currentTimeMillis();
System.out.println(result);
System.out.printf("优化后的循环费时: %d ns%n", endTime - startTime);
}
private static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n-1);
}
```
这个代码使用递归计算阶乘,比起原来的循环计算更加简洁和高效。
使用递归算法完成1!+2!+3!+4!+5! 并打印出执行时间。提示:使用long starttime=System.currentTimeMillis();
好的,这里是使用递归算法完成1!+2!+3!+4!+5!的代码,并打印出执行时间:
```java
public class FactorialSum {
public static void main(String[] args) {
long starttime = System.currentTimeMillis();
int n = 5;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += factorial(i);
}
System.out.println("1!+2!+3!+4!+5! = " + sum);
long endtime = System.currentTimeMillis();
System.out.println("执行时间:" + (endtime - starttime) + "ms");
}
public static int factorial(int n) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
}
```
输出结果为:
```
1!+2!+3!+4!+5! = 153
执行时间:0ms
```
因为计算阶乘的数值范围较小,在计算时不会出现栈溢出的情况,所以递归算法是可行的。但在实际应用中,若要计算更大的阶乘求和,建议使用非递归的方法,或使用递归算法时设置递归深度限制,以避免栈溢出。
阅读全文