我想优化该程序。当前,我的程序运行缓慢,因为程序中的功能很大程度上取决于程序中的其他功能。对此进行优化的最佳方法是什么?
public class MyClass {
public static void main(String args[]) {
int[] testValues = {3, 5, 10};
for (int i = 0; i < testValues.length; ++i) {
System.out.println(first(testValues[i]));
}
}
public static int first(int a) {
int b;
if (a <= 1) {
if (a == 1) {
b = convertOne(a);
} else {
b = convertTwo(a - 1);
}
} else {
return next(a);
}
return b;
}
public static int convertOne(int c) {
return++c;
}
public static int convertTwo(int d) {
int i = 1;
for (i = d * 11; i > d; i--) {
i--;
}
return i;
}
public static int next(int e) {
int container = first(e - 1);
return container + first(e - 2);
}
}
答案 0 :(得分:0)
我怀疑这是个玩笑或打高尔夫球的难题。该函数是一种斐波那契函数,以-11和2为第一项。
first
方法重构为:
public static int first(int a) {
if (a <= 0) {
return (a - 1) * 11;
}
if (a == 1) {
return 2;
}
int n0 = -11;
int n1 = 2;
for (int i = 2; i <= a; i++) {
int t = n0 + n1;
n0 = n1;
n1 = t;
}
return n1;
}
其余所有都是垃圾,或更可能是故意混淆。
答案 1 :(得分:-1)
1)一条黄金法则是:尽量避免嵌套。
if (a <= 1) {
if (a == 1) {
b = convertOne(a);
} else {
b = convertTwo(a - 1);
}
} else {
return next(a);
}
2)如果i--
像循环中的i-=2
一样使用过两次,则您使用了两次。
public static int convertTwo(int d) {
int i = 1;
for (i = d * 11; i > d; i--) {
i--;
}
return i;
}
3)以下代码执行的逻辑不足。
if (a <= 1) {
if (a == 1) {
b = convertOne(a);
} else {
b = convertTwo(a - 1);
}// this else is executing for cases < 1, but logic of "convertTwo(a - 1)" is ambiguous, try dry running it for -1
} else {
return next(a);
}
4)以下代码的逻辑也不必起作用
public static int convertOne(int c) {
return ++c;
}
5)函数用于执行单个可重复使用的操作。在next(int e)
函数中,您没有执行 single 。使用 first(int a)方法执行此操作。