这是来自《破解面试:第5版》的斐波那契数列递归实现
int fibonacci(int i) {
if(i == 0) return 0;
if(i == 1) return 1;
return fibonacci(i-1) + fibonaci(i-2);
}
观看了关于这个算法时间复杂度的视频“斐波那契时间复杂度”后,我现在明白为什么这个算法的运行时间是O(2n)。然而,我还在分析空间复杂度方面有困难。我在网上查阅到了这方面的信息,并有一个问题。
在这个Quora主题中,作者表示:“在您的情况下,您有n个堆栈帧f(n), f(n-1), f(n-2),...,f(1)和O(1)。”你不会有2n个堆栈帧吗?比如f(n-2),一个框架将用于实际调用f(n-2),但是从f(n-1)中也会有一个调用f(n-2)的调用,对吗?