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)));
    }

}