这里的任何人都可以帮我减少这段代码的时间复杂度:
public static int a(int number) {
if ((number == 0) || (number == 1))
return number;
else
return a(number - 1) + a(number - 2);
}
public static void main(String[] args) {
System.out.print("Enter the count of Fibonacci series: ");
int cap = new Scanner(System.in).nextInt();
System.out.println("Output: ");
for (int i = 1; i <= cap; i++){
System.out.printf("%d\n", a(i));
}
}
答案 0 :(得分:0)
您可以存储以前计算的值,因此如果您尝试计算fibonnaci(100),则不要计算斐波那契(50)大约100次。
答案 1 :(得分:0)
伪代码:
dictA = {}
a(n):
if n in dictA:
return dictA[n]
else if n <= 1:
return n
else:
val = a(n-1) + a(n-2)
dictA[n] = val
return val
答案 2 :(得分:0)
添加一些缓存非常简单,您可以在其中存储已计算的值。如果你想要完全递归算法的想法是相同的 - 只要检查已经计算的值的常规开始。如果是 - 从缓存中返回,否则 - 开始计算(不要忘记在计算结束后保存它)。
public class Fibbonaci {
public static long calc(int n) {
List<Integer> cache = new ArrayList<>();
cache.add(1);
cache.add(2);
for (int i = 2; i < n; i++) {
cache.add(cache.get(i - 1) + cache.get(i - 2));
}
return cache.get(n - 1);
}
public static void main(String[] args) {
IntStream.range(1, 10)
.forEach(n -> System.out.println("Fibb " + n + " = " + calc(n)));
}
}