java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java递归和迭代区别

Java递归和迭代区别详细介绍

作者:Smile sea breeze

这篇文章主要给大家介绍了关于Java中的迭代和递归有什么区别,文中介绍的非常详细,感兴趣的同学可以参考阅读

1.递归和迭代的区别

 时间复杂度比较

 用法比较

 开销

 无限重复

递归迭代
定义函数调用自身。重复执行的一组指令。
应用对于功能。对于循环。
终止通过 base case,这里不会有函数调用。当不再满足迭代器的终止条件时。
用法当代码大小需要很小并且时间复杂度不是问题时使用。当时间复杂度需要与扩展的代码大小进行平衡时使用
代码大小更少的代码更多的代码
时间复杂度非常高(通常是指数)的时间复杂度。时间复杂度相对较低(一般为多项式-对数)。
空间复杂度空间复杂度高于迭代。空间复杂度较低。
这里的栈是用来存放函数调用时的局部变量的。不使用堆栈。
速度执行速度很慢,因为它有维护和更新堆栈的开销。通常,它比递归更快,因为它不使用堆栈。
存储与迭代相比,递归使用更多内存。没有开销,因为迭代中没有函数调用。
高架拥有重复函数调用的开销。没有开销,因为迭代中没有函数调用。
无限重复如果递归函数不满足终止条件或未定义或从未达到基本情况,则会导致堆栈溢出错误,并且系统有可能在无限递归中崩溃。如果迭代语句的控制条件永远不为假或控制变量没有达到终止值,就会造成死循环。在无限循环中,它一次又一次地使用 CPU 周期。

2.代码

public class Test {
    // ----- 递归 -----
    // 求给定数的阶乘的方法
    static int factorialUsingRecursion(int n)
    {
        if (n == 0)
            return 1;

        // 递归呼叫
        return n * factorialUsingRecursion(n - 1);
    }

    // -----迭代 -----
    //求给定数的阶乘的方法
    static int factorialUsingIteration(int n)
    {
        int res = 1, i;

        // 迭代
        for (i = 2; i <= n; i++)
            res *= i;

        return res;
    }

    public static void main(String[] args)
    {
        int num = 5;
        System.out.println("Factorial of " + num
                + " using Recursion is: "
                + factorialUsingRecursion(5));

        System.out.println("Factorial of " + num
                + " using Iteration is: "
                + factorialUsingIteration(5));
    }
}
Factorial of 5 using Recursion is: 120
Factorial of 5 using Iteration is: 120

到此这篇关于Java递归和迭代区别详细介绍的文章就介绍到这了,更多相关Java递归和迭代区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文