Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归和循环打印斐波那契数列的时间和空间复杂性_Java_Big O_Complexity Theory_Fibonacci - Fatal编程技术网

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

Java 使用递归和循环打印斐波那契数列的时间和空间复杂性,java,big-o,complexity-theory,fibonacci,Java,Big O,Complexity Theory,Fibonacci,使用递归和循环打印斐波那契数列的时间和空间复杂度(大O表示法)是多少?有一个用于打印斐波那契数的循环,在计算时间和空间复杂度时是否也包括该循环 我下面的分析正确吗 使用递归 public int-printfibonacci系列(int-n){ 如果(n这可能是一个更好的评论,但因为我没有足够的代表,这里开始- 您可以在这里看到递归实现是如何占用空间O(n)而不是O(1),因为递归树是在它们全部添加和关闭之前构建的 (注意-链接视频中的时间戳显示了Fac(n)函数的图表,但随后在视频Fib函数中

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

我下面的分析正确吗

使用递归
public int-printfibonacci系列(int-n){

如果(n这可能是一个更好的评论,但因为我没有足够的代表,这里开始-

您可以在这里看到递归实现是如何占用空间O(n)而不是O(1),因为递归树是在它们全部添加和关闭之前构建的


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

也不能是O(1)空间复杂度。递归排除了第一个,并且
new int[n]
第二种情况是不可能的。这比我写一个完整的答案要花更多的时间,所以简短的版本是:递归解的空间复杂度是O(n)。空间复杂度衡量的是运行算法需要多少空间,而不是算法返回后使用了多少空间。知道它是O(n)意味着数字越大,避免堆栈溢出所需的调用堆栈越大。(续)O(n2^n)的时间复杂度是正确的,尽管仅供参考,它不是一个严格的上界。如果你想要一个严格的上界,数学是相当复杂的;它涉及到一些复杂的代数,可能不值得研究。
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));
    }
}
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);
}