Java 提高此代码的时间复杂度
这里的任何人都可以帮助我降低此代码的时间复杂性:Java 提高此代码的时间复杂度,java,time-complexity,fibonacci,Java,Time Complexity,Fibonacci,这里的任何人都可以帮助我降低此代码的时间复杂性: 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
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));
}
}
公共静态整数a(整数编号){
如果((数字==0)| |(数字==1))
返回号码;
其他的
返回a(数字-1)+a(数字-2);
}
公共静态void main(字符串[]args){
System.out.print(“输入斐波那契数列的计数:”);
int cap=新扫描仪(System.in).nextInt();
System.out.println(“输出:”);
对于(int i=1;i您可以存储以前计算的值,因此如果您尝试计算fibonnaci(100),则不会计算大约100次fibonacci(50)。伪代码:
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
dictA={}
a(n):
如果在格言中为n:
返回格言[n]
否则,如果n则添加一些缓存非常简单,您将在其中存储已计算的值。如果您完全想要递归算法,则想法将是相同的-只要在例程开始时检查值是否已计算。如果是-从缓存返回,否则-开始计算(计算结束后不要忘记保存)
公共类Fibbonaci{
公共静态长计算(整数n){
列表缓存=新的ArrayList();
添加(1);
添加(2);
for(int i=2;iSystem.out.println(“Fibb”+n+“=”+calc(n)));
}
}
提示:如果我问你fib(10)的值,而你没有电脑——只有铅笔和纸——你会怎么做?
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)));
}
}