为什么使用递归分配存储空间会出现意想不到的错误

yhh_satan 2002-05-18 11:25:49
前几天,本人使用一个递归函数来生成一个链表,却老是发生错误,且对于函数本身
已经检验多遍,绝无错误。而后来我使用循环代替了递归,结果程序运行正常,故我
在这里想请问各位高手此问题应当怎样解决,是否是在 递归压栈的时候发生了错误
...全文
53 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
codingcoding 2002-05-19
  • 打赏
  • 举报
回复
因为每次递归的时候,函数的参数都要压栈。如果递归层次很深的话。那么压进去的参数就很多了。因为堆栈是有限的。就会造成栈溢出。产生错误。
cwizard 2002-05-19
  • 打赏
  • 举报
回复
在用递归建立链表是非常耗费存储空间的,如果递归的深度大些,就会因为内存不足而发生错误,这是由递归的实现原理决定的,递归要建立递归函数栈,毕竟存储空间中堆栈空间是有限的,你可以试一试,用递归写一个从1加到n的累加程序,使n 不断增大,看n多大时会发生错误
dark_zy 2002-05-19
  • 打赏
  • 举报
回复
你自己说对了
在递归的时候,进入递归前
需要把所有内存或寄存器有关的内容压栈
当你用递归生成链表时,链表的上一个结点地址已经是在栈中(不一定是栈顶),此时,你就不能直接把新链表结点跟链表连接,否则会出错

所以生成链表的大都是用循环,很少用递归,除非你可以把链表的结点地址的进/出栈处理得很好(象自己新建一个栈,专门存储链表结点地址,不过这也没必要,用循环就很好了,省空间)。
僵哥 2002-05-18
  • 打赏
  • 举报
回复
首先,你懂不懂递归?我是不懂,所有用起来不是不得已简化的话还要考虑考虑。
illia 2002-05-18
  • 打赏
  • 举报
回复
在别人的机器上能不能跑啊?
把程序贴出来
illia 2002-05-18
  • 打赏
  • 举报
回复
在别人的机器上能不能跑啊?
把程序贴出来
yhh_satan 2002-05-18
  • 打赏
  • 举报
回复
前几天,本人使用一个递归函数来生成一个链表,却老是发生错误,且对于函数本身
已经检验多遍,绝无错误。而后来我使用循环代替了递归,结果程序运行正常,故我
在这里想请问各位高手此问题应当怎样解决,是否是在 递归压栈的时候发生了错误
本人用的是 c,编译器为turbo c++

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧