递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.
一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.
使用递归要注意的有两点:
1)递归就是在过程或函数里面调用自身;
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
递归分为两个阶段:
1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;
2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.
利用递归可以解决很多问题:如背包问题,汉诺塔问题,...等.
斐波那契数列为:0,1,1,2,3,5...
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2);
[cpp] view plaincopyprint?
int fib(int n)
{
if(0 == n)
return 0;
if(1 == n)
return 1;
if(n > 1)
return fib(n-1)+fib(n-2);
}
上面就是一个简单的递归调用了.由于递归引起一系列的函数调用,并且有可能会有一系列的重复计算,递归算法的执行效率相对较低.
迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.
递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.
[cpp] view plaincopyprint?
//这是递归
int funcA(int n)
{
if(n > 1)
return n+funcA(n-1);
else
return 1;
}
//这是迭代
int funcB(int n)
{
int i,s=0;
for(i=1;i<n;i++)
s+=i;
return s;
}
http://blog.csdn.net/swliao/article/details/5337896
相关推荐
在Java中实现递归和迭代算法时,需要特别注意递归算法的终止条件,以防止栈溢出错误。同时,迭代算法中要注意循环变量的控制,确保循环能够正确退出。 此外,递归和迭代的效率问题也是程序员需要关注的重点。递归...
递归公式通常为`dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]] + value[i])`,其中`weight[i]`和`value[i]`分别是第`i`个物品的重量和价值。这种方法虽然有效,但递归可能会导致大量的函数调用,效率较低。 2. ...
枚举算法,递归与分治策略,递归与迭代的思想、求最大值最小值、线性查找、二分查找与冒泡排序以及选择与交换排序、插入和希尔排序。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂...
在编程领域,递归和迭代是两种常见的解决问题的方法,它们在Java编程中有着广泛的应用。本文将深入探讨这两种方法,并通过实例分析它们的工作原理、优缺点以及如何在实际编程中选择合适的方式。 首先,让我们理解...
### Oracle中的递归查询详解 #### 一、引言 在数据库管理中,处理具有层次结构的数据是一项常见的任务。例如,在组织结构、产品分类或文件系统等场景...希望本文能帮助读者更好地理解和应用Oracle中的递归查询技术。
"DNS 迭代查询和递归查询的区别" DNS(Domain Name System)是 Internet 中的一个基础设施,提供域名到 IP 地址的映射服务。在 DNS 解析过程中,查询类型是一个关键概念,有两种主要的查询类型:迭代查询和递归查询...
根据给定文件的信息,我们可以深入探讨递归与迭代这两个重要的编程概念。递归与迭代都是解决计算机科学领域问题的重要方法,它们在算法设计、数据结构处理等方面有着广泛的应用。 ### 一、递归 #### 1.1 什么是...
fibonacci数列的各种解法,递归、存储优化的递归、自下而上的递归(迭代法)、尾递归。其中分析内容请移步我的博客、
例如,"递归和迭代的区别.doc"可能阐述了递归如何通过递归公式解决斐波那契序列或其他分治策略问题,如分治法的基本思想文档所讨论的那样。递归在解决某些问题时有其独特的优势,因为它能够简化代码结构,但需要注意...
本文将深入探讨递归与迭代的区别,以及如何在Java中有效地使用它们。 首先,让我们理解递归的基本概念。递归是一种函数或方法调用自身的技术,通常用于解决分治策略的问题,如树遍历、排序(如快速排序)和计算阶乘...
总的来说,递归与迭代都是解决问题的有效工具,选择哪种方法取决于具体问题的性质、性能需求以及代码的可读性和维护性。理解这两种方法的原理和优缺点,能够帮助我们编写出更加高效和优雅的代码。
分别使用递归和迭代的方法进行了讲解,并引入了Morris遍历的技巧。每种方法都附有详细的解题思路和Java、Python的实现代码。 适合人群:对数据结构有一定基础的开发者,特别是希望深入理解二叉树遍历算法的人群。 ...
理解它们之间的区别,对于编写高效和优雅的代码至关重要。 迭代是一种方法,它通过重复执行一组指令来逐步逼近最终结果。在编程中,迭代通常通过循环结构来实现,如for循环或while循环。迭代的过程需要明确三个要素...
递归和迭代是C语言中两种重要的算法设计技术。递归通过函数自调用来解决问题,代码简洁但可能存在性能和栈溢出的问题。...理解递归和迭代的区别,掌握它们的应用场景,能够帮助我们更好地解决实际问题。
在编程世界中,递归和迭代是两种基本的解决问题的方法,尤其在Java语言中,它们在算法设计中占据着核心地位。本资料包主要探讨了这两种算法的概念、区别以及它们在Java中的具体应用。 首先,我们要理解递归。递归是...
公司要求分享迭代和递归函数,在周末的时间整理了一个简单的PPT,在这里也分享给大家,互相学些,相互总结。
DNS转发器,根提示,递归,迭代的差别..
DNS 递归和迭代查询原理及过程详解 在了解 DNS 递归和迭代查询原理及过程之前,我们需要了解一些背景知识。 DNS 系统中有两类域名服务器:国际域名管理机构(InterNIC)和国内域名注册管理机构(CNNIC)。这两类...
在Java程序设计中,递归和迭代是两种常见的解决问题的方法。递归是函数或方法直接或间接调用自身,将复杂问题分解为相似的子问题来解决,而迭代则使用循环结构逐步推进问题的解决。 1. 递归: - **递归公式**:...