码迷,mamicode.com
首页 > 其他好文 > 详细

关于递归和循环

时间:2015-04-15 09:37:41      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

一. 递归的慢究竟慢在哪

递归就是函数自己调用自己,函数每次调用的时候需要将以下内容存入递归栈:调用函数地址、形参局部变量、返回值。所以如果递归调用了N次,那压栈操作要保存N * 调用函数地址、N * 局部变量、N * 形参、N * 返回值。这势必是影响效率的。


二. 递归和循环的比较:

递归和循环是两种不同的解决问题的思路,我们不能片面的说循环的效率一定会比递归高,下面我们做简单的分析:

1. 递归:

优点:代码简洁,清晰

缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,甚至可能出现堆栈溢出的情况。因为递归的操作涉及到压栈、弹栈等操作,会对执行效率有一定影响。

如果编译器对函数调用做了较好的效率优化,那递归的效率未必低于循环。

2. 循环:

优点:结构简单,速度快(相对)

缺点:并不能解决所有问题,有些问题适合使用递归而不是循环(如:求阶乘)。

当然,如果使用循环解决很简单的话,最好还是用循环。


三. 递归使用的是什么栈

栈分为两种:系统栈和用户栈,递归使用的是用户栈。

1. 系统栈(又称核心栈、内核栈) 是内存中属于操作系统空间的一块区域,主要用途为:

(1). 保存中断现场,对于嵌套中断,被中断程序的现场信息一次压入系统栈,中断返回时逆序弹出。

(2). 保存操作系统子进程间相互调用的返回点、参数局部变量、返回值。

2. 用户栈是用户进程空间中的一块区域,用户保存用户进程的子程序间相互调用的返回点、参数、局部变量、返回值。

转自:http://www.nowamagic.net/librarys/veda/detail/2322


关于递归和循环

标签:

原文地址:http://blog.csdn.net/zdp072/article/details/45054393

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!