专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C语言教程 » c语言递归算法:C语言递归 »正文

c语言递归算法:C语言递归

来源: 发布时间:星期四, 2009年2月12日 浏览:62次 评论:0


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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: