当前位置: 首页 > 知识库问答 >
问题:

使用递归和循环打印斐波那契级数的时间和空间复杂性

司空丰
2023-03-14

使用递归和循环打印斐波那契级数的时间和空间复杂度(大O表示法)是多少?有一个用于打印斐波那契数的循环,在计算时间和空间复杂度时是否也包括该循环?

我下面的分析正确吗?

public int printFibonacciSeries(int n) {
    if (n <= 1) {
        return n;
    }
    return printFibonacciSeries(n - 1) + printFibonacciSeries(n - 2);
}

public static void main(String[] args) {
    ...
    FibonacciSeries fibonacciSeries = new FibonacciSeries();

    for (int i = 0; i < n; i++) {
        System.out.println("i=" + i + " and "  + fibonacciSeries.printFibonacciSeries(i));
    }
}

我的分析:

  • 时间复杂度:O(n 2n)-因为对于所有n个值,计算斐波那契(计算第n个斐波那契为2n
  • 空间复杂度:O(1)-递归调用被添加到堆栈中,但一旦执行完成,值就会从堆栈中删除
public void printFibonacciSeriesWithLoop(int n) {
    int[] arr = new int[n];
    for (int i = 0; i < n; i++) {
        if (i <= 1) {
            arr[i] = i;
        } else {
            arr[i] = arr[i-1] + arr[i-2];
        }
    }
    Arrays.stream(arr).forEach(System.out::println);
}

public static void main(String[] args) {
    ...
    FibonacciSeries fibonacciSeries = new FibonacciSeries();
    fibonacciSeries.printFibonacciSeriesWithLoop(i);
}

我的分析:

  • 时间复杂度:O(n n)或O(2n)⟹ O(n)-第一个O(n)用于计算,另一个O(n)用于打印,so 2n,但去掉常数

共有1个答案

易英奕
2023-03-14

这可能是一个更好的评论,但因为我没有足够的代表,这里去-

https://youtu.be/_JtPhF8MshA?t=219您可以在这里看到递归实现是如何占用空间O(n)而不是O(1),因为递归树是在它们全部添加和关闭之前构建的!

(注意-链接视频中的时间戳显示了Fac(n)功能的图,但随后在视频Fib功能中也进行了解释,但由于那里没有图,因此附上了此图)

 类似资料:
  • 我有一个使用递归打印斐波那契级数的程序。有更好的方法,但我被要求使用递归,所以我不得不这样做。 这是程序: 我知道这对于斐波那契级数来说真的是一种糟糕的方法,从上面可以清楚地看出,当项超过35时,程序需要很多时间才能完成。 我看了这个答案,不明白他们是怎么解决的,但看起来 fibo(int n)的时间复杂度为O(2^n) 我可能完全错了,但我只想: 这个完整程序的时间复杂度是多少,简要解释一下您是

  • Python3 实例 以下代码使用递归的方式来生成斐波那契数列: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n

  • 问题内容: 我在大学为我的Programming II类编写的程序需要一些帮助。这个问题要求人们使用递归来计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并减少计算时间。 我设法使程序在没有数组和存储的情况下运行,现在我试图实现该功能,但遇到了麻烦。我不确定如何组织它。我已经浏览了Google并浏览了一些书,但没有太多帮助我解决如何实施解决方案的方法。 上面是不正

  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波

  • 我试图想出一个程序,从用户那里获取任何数字,并生成斐波那契码的第n个数字。当我完成工作时,它会显示下一个,而不是我需要的。例如,我正在寻找第11个#和它的生产233而不是144。这是我的代码:

  • 我在计算这段从0到n打印所有斐波那契数的代码的时间复杂度。根据我的计算,方法需要,并且由于它被调用次数,所以它出来是。然而,书上说它是。有人能解释一下为什么这里的时间复杂度会是吗? 代码如下: