族谱网 头条 人物百科

堆栈溢出

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:183
转发:0
评论:0
递归溢出无限递归无限递归是堆栈溢出的最常见原因,如以下的C/C++语言程序会产生堆栈溢出:intfoo(){returnfoo();//這裡出現自我呼叫}然而有些语言(如Scheme)支持尾部递归优化,在这些语言中只有一般递归会产生堆栈溢出,而尾部递归不会:(define(foo)(foo))(define(foo)(+(foo)1))这段代码中,前者(第一句)进入死循环(Infiniteloop),但不会产生堆栈溢出;后者(第二句)则会产生堆栈溢出。防止堆栈溢出多数无限递归出现原因,都是基于程序本身没有错误检测机制:intfactorial(constint*constn){if(*n==0)return1;elsereturn*n*factorial(*n--);//這裡出現自我呼叫};如果在这里的n是负数则会出现无限递归。其实,这段程序可以简单地加以修改,把n的类型由整数改为非负整数...

递归溢出

无限递归

无限递归是堆栈溢出的最常见原因,如以下的C/C++语言程序会产生堆栈溢出:

intfoo(){returnfoo();//這裡出現自我呼叫}

然而有些语言(如Scheme)支持尾部递归优化,在这些语言中只有一般递归会产生堆栈溢出,而尾部递归不会:

(define (foo)(foo))(define (foo)(+ (foo)1))

这段代码中,前者(第一句)进入死循环(Infinite loop),但不会产生堆栈溢出;后者(第二句)则会产生堆栈溢出。

防止堆栈溢出

多数无限递归出现原因,都是基于程序本身没有错误检测机制:

intfactorial(constint*constn){if(*n==0)return1;elsereturn*n*factorial(*n--);//這裡出現自我呼叫};

如果在这里的 n 是负数则会出现无限递归。其实,这段程序可以简单地加以修改,把 n 的类型由整数改为非负整数即可解决:

unsignedintfactorial(constunsignedint*constn){if(*n==0)return1;elsereturn*n*factorial(*n--);};

或者使用循环处理:

unsignedintfactorial(constunsignedint*constn){unsignedinti,result;for(i=*n,result=1;i>0;--i)result*=i;//自我呼叫部份改為迴圈處理returnresult;};

参看

溢出


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 堆栈
操作堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。特点栈的基本特点:先入后出,后入先出。除头尾节点之外,每个元素有一个前驱,一个后继。抽象定义以下是堆栈的VDM(ViennaDevelopmentMethod(英语:ViennaDevelopmentMethod)):函数签名:此处的N代表某个元素(如自然数),而U表示集合求交。语义:软件堆栈阵列堆叠堆栈可以用链表和数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack结构下含一个数组。如果空间实在紧张,也可用链表实现,且去掉表头。这里的例程是以数组实现的。#include#include#include#definestackstructStack...
· 世界上最幸福的10个国家,幸福感简直要溢出来了
世界上最幸福的10个国家「这里有最美丽的风景、蓝色的河流与免费的教育环境,住在这里的人都乐观友善。」上面这段话,会让你想到哪个地方呢?NationalGeographic根据联合国提供的资料,评选出了世界上十个最幸福的国家,就让大乐吧为你揭晓评选的结果吧!瑞典瑞典,来自北欧的梦幻国度,人人向往的美丽仙境。让瑞典人幸福的原因,在于他们传统的生活观念:Fika。根据这个传统,瑞典人每天在工作期间,只要手上的事情稍微告一段落,他们一定会离开办公室,和朋友或同事去喝一杯咖啡。15分钟的放松时光,让他们可以在工作上保持2个小时的愉快心情,难怪咖啡在瑞典这么受欢迎!澳大利亚澳大利亚有污染最少的自然环境,还有团结高水平的社会结构。这里的居民热爱BBQ,我们可以在各地的公园内看到居民聚在一起烤肉。就算你在这里找不到可以和你一起烤肉的好朋友,那也可以多多接触澳大利亚广大的土地与美丽的大自然。纽西兰既然都有澳...
· 奥古公主是真实存在的吗?墓被专家打开,其胸前溢出银色液体
奥古公主在历史上确有其人,墓被专家打开,其胸前溢出银色液体、相必《寻龙诀》这部电影大家都看过吧。在《寻龙诀》中胡八一原来和杨雪莉和老王移居美国,不想再干盗墓的这个事情了,但是当时胡八一和老王当知青的时候,心中一直有一个执念,那就是初恋丁思甜。为了老王和胡八一能够好好的活着出去丁思甜自己砍断了木头,结果她自己掉入火海死去了,她死前最大的心愿就是想得到彼岸花。于是老王听说到这个地方有彼岸花以后,老王便回去盗墓,想要得到彼岸花,给丁思甜一个交代。打开墓穴以后,发现里面躺的是奥古公主的墓,她掌握着彼岸花。每逢一个时候,彼岸花就会打开生死之门,就会被打开。当时丁思甜的幻象也出来了,胡八一在幻象中战胜了心魔。并且喊出丁思甜的死去不是为了让我们怀念,而是为了让我们好好活着。他打碎了彼岸花,三个人终于逃出了那个古墓。其实这个奥古公主的墓并不是杜撰的,在历史上奥古公主确实有这个人。当时专家发现了这个墓穴以后...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信