当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 因电脑长时间放置,现在开机发出一声长鸣,请问是内存条没有接触好还是显示卡没有接触好呢?还有将内存条和显示卡都卸下时,启动也是一声长鸣,这儿个都插上也是一样。 顺便问一下,电脑启动的时候是先监测内存条还是显示卡呢?? ......
 ·isapi中怎么使用session    »显示摘要«
    摘要: 在isapi中如何去得到session的值以及如何获得根目录???我找资料找了好久都没有找到。 ......


能够递归多少次

请问c语言和linux最多支持多少次函数的递归?  
  跟哪些因素有关?

NO.1   作者: steedhorse

跟栈的大小有关。

NO.2   作者: steedhorse

不一定递归多少次,这要看递归函数的空间复杂度,总之一旦栈溢出,就完蛋了。

NO.3   作者: GOTO_2002

不懂,帮你up一下,不过我干肯定,这件事一定和机器的内存有关~~~^^

NO.4   作者: steedhorse

其实系统根本不知道你是在递归,因此也就无法规定递归的层数。  
  也就是说,系统只知道你在调用某个函数,根本没注意调用者和被调用者其实是同一个函数。系统只是随着调用深度的增加,老老实实地不断帮你完成栈内存的分配,也就是栈增长,等增长到溢出,也就玩完了。

NO.5   作者: steedhorse

是“10万层”还是“10万次”?递归关键是层数,比如说树的遍历,层数跟次数就不一样,因为中途就有回溯。  
  栈的大小我也不太清楚,而且不同的操作系统可能还不一样。如果是10万层,你还是自己试试吧。

NO.6   作者: test7979

看你栈大小设置多少大了  
  cl   编译的时候可以设置的   /F<num>   set   stack   size

NO.7   作者: test7979

所以说:GOTO_2002()()小小强()()   的答案是正确的   :)  
   
  据MSDN说默认是1M  
   
  这样结合你自己函数的参数定义就可以计算出大概能递归几次了

NO.8   作者: test7979

1M当然是栈的大小,是字节数  
   
  能调几层和你函数参数有关

NO.9   作者: steedhorse

你这个用不了多少内存的,out函数只有一个参数:i。局部变量一个都没有。字符串"Game   OK"和"%d"都放在静态存储区中,加上函数压栈的必要信息,应该也就是10几个字节吧,因此10万层应该也就在1兆左右。  
  你的程序在VC6的Release版本中也没有问题,但想溢出,也很简单,比如下面的程序每一层递归只比你原来的多用了10个字节,就溢出了。不过你可以在Linux里再试试。  
   
  #include   <stdio.h>  
   
  out(long   i)  
  {  
  char   s[10]   =   "Game   Ok!";  
  if   (i==0)  
  printf(s);  
  else  
  {               if(i%100   ==   0)  
  printf("%d",i);  
  i--;  
  out(i);  
  }  
  }  
   
  main()  
  {  
  out(100000);  
  }

NO.10   作者: steedhorse

不过我不确定Windows中栈段的大小是否是1M。

NO.11   作者: steedhorse

char   s[10]   =   "Game   Ok!";  
  肯定是在栈里的,因为这种跟  
  char*   s   =   "Game   Ok!";  
  不一样,后者只在栈里放了个指针,指向静态存储区的常量字符串"Game   OK!",而前者却是个拥有10个元素的字符数组,只是用"Game   OK!"初始化了一下。

NO.12   作者: steedhorse

“我推测,溢出和栈的大小有关,而和内存的大小无关。”  
  不用推测,本来就是这样的。:)  
  不过我也不确定栈的大小是否可调。

NO.13   作者: steedhorse

比如说,定义一个在函数递归时,一直可以用的临时变量。  
  那就用全局变量呀。其实你原来用常量形式写的字符串“Game   OK!”就不必每次出栈入栈,因为它保存在全局的静态存储区中。

NO.14   作者: canany1tellme

我写过一个快速排序的递归,大约能够递归30000层就发生stack溢出

NO.15   作者: steedhorse

指针嘛,本来就有这个好处,自己只占4个字节,但能指向一块很大的区域。:)


 ·,我的主板能上多高的cup    »显示摘要«
    摘要: 我的主板是技嘉6bxc的主板,是440bx芯片,主板的版本是1.9,bios是版本是f4c, 倍频最高只有6.5,我现在想换个cup,不知道哪位高人可以告诉我主板百分之百的能上多高的cup,谢谢。 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE