C语言中使用递归是提高了运行速度还是降低了?

来源:百度知道 编辑:UC知道 时间:2024/07/02 17:56:56
比如算链表数据的长度:
int length(struct list *p)
{
int n=0;
while(p!=null){
n++;
p=p->next;}
return n;
}
递归的是:
int length_r(struct list *p)
{if(p==null)return 0;
else return 1+length_r(p->next);
}

分别从运行速度和内存使用效率上比较这两个函数哪个更优秀?
请高手指教~~谢谢
这个运行度怎么比较?如果考试的话,它问为什么,我应该怎么答? 两个函数的时间复杂度分别是多少?

非递归和递归之间
1速度。递归函数是在不断的调用本身的函数,一般函数的调用.返回,是比较费时间的,尤其是在递归深度较大时。所以个人觉得非递归的速度较好。
2.空间。递归函数很明显,始终是在入栈,只有在最后才出栈,大量的浪费了堆栈空间。在这一点上非递归肯定要比递归好。
总结。个人认为递归函数只是在程序书写上简单明了,但实际运行个人不看好。
一个是O(N) 一个是O(N*N)

循环的要比递归的效率更高
递归的存在每次要调用一次的过程。而且要取返回值。

循环是N,递归是N的平方。

当然是迭代好,内存小,速度快

递归要不断的进栈出栈,当然降低了速度