Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74270
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-29 14:47
文章存档

2014年(13)

2013年(15)

我的朋友

分类: C/C++

2013-12-06 14:34:55

由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。
递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上
会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有需要额外的时间开销。
所以在深度大时,它的时空性就不好了。
#define LEN 4
char buf[LEN]={'a','b','c','d'};
void print_backward(int pos)
{
  if(pos==LEN)
  {
    printf("me talk\n");
    return;
    }
  printf("%d\n",pos);
  print_backward(pos+1);//递归结束之前,放到栈里面,结束后出栈
  printf("-------------\n");
  printf("*************\n");
  putchar(buf[pos]);
}
int main(int argc,char *argv[])
{
  print_backward(0);
}
结果:0  1  2  3 me talk ----------- ********* d -------- ******** c
-----------******** b ------------********** a

以下是斐波那契数列很好的说明了,当递归层数过多的时间,时间几何级增加了。

#include

int Fibonacci(int n)
{
  if((n==1)||(n==2))
    return n;
  else
    return Fibonacci(n-1)+Fibonacci(n-2);
}

int main(int argc,char *argv[])
{
  time_t cur=time(NULL);
  time(&cur);
  char *curstr=ctime(&cur);
  int i,j;
  i=atoi(argv[1]);//当i超过50的时候,就非常明显了
  for(j=1;j<=i;j++)
  printf("%s : j=%d,Fibonacci=%d\n",curstr,j,Fibonacci(j));
  return 0;
}

阅读(913) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~