我在接受采访时被问到这个问题。这是该方法的复杂性吗?
static int magic(int n) {
System.out.println( count+" "+ n);
count++;
return (n < 2) ? n : magic(n - 1) + magic(n - 2);
}
答案 0 :(得分:2)
复杂性是指数级的。
除了基本情况(当n <2时),对方法的每次调用都会调用自己两次。您可以绘制表示调用的二叉树。例如,如果你用5作为参数调用magic:
树没有完美平衡,但它不会改变大O符号,即O(2 ^ n)。
你的算法是一个fibonnaci序列算法,所以你可以在互联网上阅读很多,包括如何将其复杂性改为多项式时间。