教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 系统编程教程 · C语言 · C语言基础教程

C语言递归

学院最新推荐文章
教程推荐
『C语言递归』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2005-6-7 


C语言函数可以自我调用。如果函数内部一个语句调用了函数自己,则称这个函数是“递归”。递归是以自身定义的过程。也可称为“循环定义”。
递归的例子很多。例如定义整数的递归方法是用数字1,2,3,4,5,6,7,8,9加上或减去一个整数。例如,数字15是7+8;数字21是9+12;数字12是9+3。
一种可递归的计算机语言,它的函数能够自己调用自己。一个简单的例子就是计算整数阶乘的函数factor()数N的阶乘是1到N之间所有数字的乘积。例如3的阶乘是1×2×3,即是6。
factor()和其等效函数fact()如例4-10所示。

非递归函数fact()的执行应该是易于理解的。它应用一个从1开始到指定数值结束的循环。
在循环中,用“变化”的乘积依次去乘每个数。
factor()的递归执行比fact()稍复杂。当用参数1调用factor()时,函数返回1;除此之外的其它值调用将返回factor(n-1)*n这个乘积。为了求出这个表达式的值,用(n-1)调用factor()一直到n等于1,调用开始返回。
计算2的阶乘时对factor()的首次调用引起了以参数1对factor()的第二次调用。这次调用返回1,然后被2乘(n的初始值),答案是2(把printf()语句插入到factor()中,察看各级调用及其中间答案,是很有趣的)。
当函数调用自己时,在栈中为新的局部变量和参数分配内存,函数的代码用这些变量和参数重新运行。递归调用并不是把函数代码重新复制一遍,仅仅参数是新的。当每次递归调用返回时,老的局部变量和参数就从栈中消除,从函数内此次函数调用点重新启动运行。可递归的函数被说成是对自身的“推入和拉出”。
大部分递归例程没有明显地减少代码规模和节省内存空间。另外,大部分例程的递归形式比非递归形式运行速度要慢一些。这是因为附加的函数调用增加了时间开销(在许多情况下,速度的差别不太明显)。对函数的多次递归调用可能造成堆栈的溢出。不过溢出的可能性不大,因为函数的参数和局部变量是存放在堆栈中的。每次新的调用就会产生一些变量的复制品。这个堆栈冲掉其它数据和程序的存储区域的可能性是存在的。但是除非递归程序运行失控,否则不必为上述情况担心。
递归函数的主要优点是可以把算法写的比使用非递归函数时更清晰更简洁,而且某些问题,特别是与人工智能有关的问题,更适宜用递归方法。递归的另一个优点是,递归函数不会受到怀疑,较非递归函数而言,某些人更相信递归函数。编写递归函数时,必须在函数的某些地方使用if语句,强迫函数在未执行递归调用前返回。如果不这样做,在调用函数后,它永远不会返回。在递归函数中不使用if语句,是一个很常见的错误。在开发过程中广泛使用printf()和getchar()可以看到执行过程,并且可以在发现错误后停止运行。

 

作者:无 来源:无
】【关闭窗口
·上页:
·下页:
相关文章
     系统编程教程 - C语言基础教程
普通教程新手必看
普通教程新手必看
普通教程趣味程序导学C语言
普通教程用Win-TC编译与用TC2.0编译地差
普通教程C语言学习初次体会
普通教程C语言漫谈
普通教程Linux下面怎么样进行C语言编制程
普通教程怎么样在一个程序后面运行另一个
普通教程新手问与答(怎么样产生random数
普通教程C语言程序设计(第9章 实用编制程
普通教程C语言程序设计(第9章 实用编制程
普通教程C语言程序设计(第8章 输入输出和
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光