`
xp9802
  • 浏览: 1208307 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中递归和迭代的区别

阅读更多

递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.

 

一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.

 

使用递归要注意的有两点:

 

1)递归就是在过程或函数里面调用自身;

 

2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.

 

 

 

递归分为两个阶段:

 

1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

 

2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

 

 

 

利用递归可以解决很多问题:如背包问题,汉诺塔问题,...等.

 

斐波那契数列为:0,1,1,2,3,5...

 

fib(0)=0;

 

fib(1)=1;

 

fib(n)=fib(n-1)+fib(n-2);

 

 

 

 

 

 

 

 

  1.  

  2. int fib(int n)  

  3.  

  4. {  

  5.  

  6.    if(0 == n)  

  7.  

  8.        return 0;  

  9.  

  10.    if(1 == n)  

  11.  

  12.        return 1;  

  13.  

  14.    if(n > 1)  

  15.  

  16.        return fib(n-1)+fib(n-2);  

  17.  

  18. }  

 

 

 

上面就是一个简单的递归调用了.由于递归引起一系列的函数调用,并且有可能会有一系列的重复计算,递归算法的执行效率相对较低.

 

 

 

 

 

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

 

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.

 

 

 

 

 

 

 

 

  1.  

  2. //这是递归   

  3.  

  4. int funcA(int n)  

  5.  

  6. {  

  7.  

  8.     if(n > 1)  

  9.  

  10.        return n+funcA(n-1);  

  11.  

  12.     else   

  13.  

  14.        return 1;  

  15.  

  16. }  

  17.  

  18. //这是迭代   

  19.  

  20. int funcB(int n)  

  21.  

  22. {  

  23.  

  24.     int i,s=0;  

  25.  

  26.     for(i=1;i<n;i++)  

  27.  

  28.        s+=i;  

  29.  

  30.     return s;  

  31.  

  32. }  

分享到:
评论

相关推荐

    递归与迭代算法及其在JAVA语言中的应用.pdf

    在Java中实现递归和迭代算法时,需要特别注意递归算法的终止条件,以防止栈溢出错误。同时,迭代算法中要注意循环变量的控制,确保循环能够正确退出。 此外,递归和迭代的效率问题也是程序员需要关注的重点。递归...

    Java之递归和迭代用法

    在编程领域,递归和迭代是两种常见的解决问题的方法,它们在Java编程中有着广泛的应用。本文将深入探讨这两种方法,并通过实例分析它们的工作原理、优缺点以及如何在实际编程中选择合适的方式。 首先,让我们理解...

    Java 递归和迭代的方法详解.pdf

    本文将深入探讨递归与迭代的区别,以及如何在Java中有效地使用它们。 首先,让我们理解递归的基本概念。递归是一种函数或方法调用自身的技术,通常用于解决分治策略的问题,如树遍历、排序(如快速排序)和计算阶乘...

    Java程序设计中递归与迭代的比较.pdf

    在Java程序设计中,递归和迭代是两种常见的解决问题的方法。递归是函数或方法直接或间接调用自身,将复杂问题分解为相似的子问题来解决,而迭代则使用循环结构逐步推进问题的解决。 1. 递归: - **递归公式**:...

    递归与迭代算法及其在JAVA语言中的应用.zip

    在编程世界中,递归和迭代是两种基本的解决问题的方法,尤其在Java语言中,它们在算法设计中占据着核心地位。本资料包主要探讨了这两种算法的概念、区别以及它们在Java中的具体应用。 首先,我们要理解递归。递归是...

    二叉树遍历算法解析与实现(递归、迭代、Morris遍历)

    分别使用递归和迭代的方法进行了讲解,并引入了Morris遍历的技巧。每种方法都附有详细的解题思路和Java、Python的实现代码。 适合人群:对数据结构有一定基础的开发者,特别是希望深入理解二叉树遍历算法的人群。 ...

    Recursive to Iterative in Java:递归到Java中的迭代-开源

    在编程中,递归和迭代是两种常见的解决问题的方法。递归是函数或程序调用自身的方式,而迭代则使用循环结构来重复执行一段代码。在Java中,有时我们需要将递归算法转换为迭代,以提高性能,减少内存消耗,或者因为...

    java递归的排序和查找

    总之,Java递归的排序和查找是算法设计中的重要组成部分,理解和掌握递归能够帮助我们解决复杂问题。这个资料包可能包含了关于这些主题的实例代码和详细解释,有助于深化对递归的理解,并能应用于实际项目中。对于...

    java 递归问题文档

    这篇“java 递归问题文档”很可能是对递归的深入讲解和实例分析,旨在帮助初学者理解和掌握这一关键技能。 首先,我们需要理解递归的基本原理。递归函数通常包含两个主要部分:基本情况(base case)和递归情况...

    JAVA程序递归方式搜索Windows文件夹源代码

    在Java编程中,递归是一种强大的技术,常用于解决复杂问题,例如遍历或搜索文件系统中的文件夹。本文将详细解析如何使用Java编写一个递归程序来搜索Windows文件夹,以及涉及到的相关知识点。 首先,我们需要理解...

    java编写的递归与非递归

    在Java编程中,递归和非递归是两种常用的处理问题的方法。递归通常用于解决那些可以通过分解为更小问题来解决的问题,而非递归则更适合于使用迭代的方式来解决问题。下面将详细介绍这两种方法,并通过计算阶乘的例子...

    java程序的递归算法

    ### Java程序中的递归算法:列出某个目录下的所有子目录和文件 在计算机科学领域,递归算法是一种非常强大的工具,它可以简化很多复杂问题的解决过程。递归算法的基本思想是将一个大问题分解成若干个与原问题相似的...

    递归下降法实现语法分析器(java)

    在Java中实现递归下降法可以创建出高效且易于理解的解析器。下面将详细探讨递归下降法的原理以及如何在Java中实现。 递归下降法的基本思想是将文法规则转化为一系列的Java方法,每个方法对应一个非终结符。当解析器...

    java递归

    Java递归是编程中的一个重要概念,它是指在函数或方法的定义中调用自身的过程。在Java中,递归通常用于解决那些可以被简化为规模更小的相同问题的复杂问题,例如遍历数据结构(如树和图)、计算阶乘、搜索算法等。...

    (java递归)删除文件

    在本文中,我们将深入探讨如何使用递归方法在Java中删除文件,这通常涉及到目录及其包含的所有文件和子目录的删除。以下是根据提供的代码片段提炼出的关键知识点: ### 关键知识点一:递归函数设计 递归函数`find...

    求二叉树深度.docx(递归/迭代 - C, Java, Python)

    在本文中,我们将深入探讨如何通过递归和迭代两种方法来计算二叉树的深度,并提供C++, Java和Python的代码实现。 1. 递归算法: 递归方法基于二叉树的分治思想,即通过解决子问题来解决整个问题。对于二叉树的深度...

    java递归实现 阶乘

    在这个实例中,我们将深入探讨如何使用Java递归实现阶乘计算,并以1到10的数字为例进行演示。 阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常表示为n!。例如,5的阶乘(5!)是5 × 4 × ...

    Java中的迭代和递归详解

    Java中的迭代和递归是两种不同的编程方法,用于解决问题或执行任务。这两种方法都有各自的优点和缺点,适用于不同的场景。 **一、递归** 递归是一种函数自我调用的技术,通常涉及将大问题分解为相同或相似的子问题...

    递归的高级应用java代码

    在Java中,递归尤其适用于处理数据结构如树和图,以及解决算法问题,如汉诺塔(Hanoi Tower)问题。本篇将深入探讨递归的高级应用,并结合提供的`HanoiTower.java`和`TestHanoiTower.java`文件,解析汉诺塔问题的...

    二叉树叶子节点计数的递归与迭代实现

    然后分别用Java和Python实现了递归和非递归(基于队列)的方法来统计叶子节点个数。最后讨论了一些扩展应用,如统计非叶子节点数和满足特定条件的叶子节点数,以及打印叶子节点值的方法。 适合人群:具备基本数据...

Global site tag (gtag.js) - Google Analytics