当前位置: 首页 > news >正文

网站栏目名wordpress the content

网站栏目名,wordpress the content,成都的装修公司有哪些,导航类网站怎么做排名递归 递归是函数调用自身的一种编程技术。在C语言中#xff0c;递归的实现会占用内存栈#xff08;Call Stack#xff09;#xff0c;每次递归调用都会在栈上分配一个新的 “栈帧#xff08;Stack Frame#xff09;”#xff0c;用于存储本次调用的函数局部变量、返回地…递归 递归是函数调用自身的一种编程技术。在C语言中递归的实现会占用内存栈Call Stack每次递归调用都会在栈上分配一个新的 “栈帧Stack Frame”用于存储本次调用的函数局部变量、返回地址、参数等信息。简单点说自己调自己。 顾名思义 例子 fun(void){//一定要有结束条件 fun()}例子 从 1 2 3 ... 100 函数递归的缺陷 非常耗内存 不建议在函数中使用递归如果将栈的内存耗尽程序执行会出现报错Segmetation fault (core dumped)那么在递归的过程中到底发生了什么事情呢 以下将通过文字解析和图示说明递归对内存的占用情况让大家直观的看见递归的过程。 栈帧Stack Frame的组成 每次函数调用包括递归调用都会在内存栈区中分配一个栈帧主要用于存储以下内容 函数参数函数调用时传入的参数。返回地址函数执行完后需要返回到调用函数的位置返回地址存储在栈帧中。局部变量函数内部定义的局部变量。其他信息如寄存器保存、栈指针、帧指针等具体取决于编译器和硬件架构。 递归调用时每次调用都会创建一个新的栈帧压入到内存栈中。递归结束时函数逐层返回栈帧依次弹出释放。 递归的内存占用过程 代码一上述示例 使用递归的方式从 1 2 3 … 100 下面举一个更复杂的例子。 代码二 #include stdio.hvoid recursiveFunction(int n) {if (n 0) {printf(Recursion ends.\n);return;}printf(Entering recursion: n %d\n, n);// 递归调用recursiveFunction(n - 1);printf(Exiting recursion: n %d\n, n); }int main() {recursiveFunction(3);return 0; }执行过程分析 初次调用 recursiveFunction(3)程序会在栈中分配一个栈帧用于存储 n 3 的值。函数内部调用 recursiveFunction(2)再次分配栈帧存储 n 2。如此递归直到 n 0递归结束开始逐层返回栈帧依次弹出。 图示解析递归占用内存的变化 假设每个栈帧包含以下内容 函数参数 n。函数的返回地址。函数内部的局部变量假设没有其他局部变量。 调用栈变化过程 1. 初始状态main 函数调用 recursiveFunction(3) |--------------------| | main() Frame | -- 栈顶 |--------------------|2. 第一次递归调用recursiveFunction(3) |--------------------| | recursiveFunction | | 参数: n 3 | | 返回地址: main() | |--------------------| | main() Frame | |--------------------|3. 第二次递归调用recursiveFunction(2) |--------------------| | recursiveFunction | | 参数: n 2 | | 返回地址: recursiveFunction(3) | |--------------------| | recursiveFunction | | 参数: n 3 | | 返回地址: main() | |--------------------| | main() Frame | |--------------------|4. 第三次递归调用recursiveFunction(1) |--------------------| | recursiveFunction | | 参数: n 1 | | 返回地址: recursiveFunction(2) | |--------------------| | recursiveFunction | | 参数: n 2 | | 返回地址: recursiveFunction(3) | |--------------------| | recursiveFunction | | 参数: n 3 | | 返回地址: main() | |--------------------| | main() Frame | |--------------------|5. 第四次递归调用recursiveFunction(0) |--------------------| | recursiveFunction | | 参数: n 0 | | 返回地址: recursiveFunction(1) | |--------------------| | recursiveFunction | | 参数: n 1 | | 返回地址: recursiveFunction(2) | |--------------------| | recursiveFunction | | 参数: n 2 | | 返回地址: recursiveFunction(3) | |--------------------| | recursiveFunction | | 参数: n 3 | | 返回地址: main() | |--------------------| | main() Frame | |--------------------|6. 递归返回n 0 开始返回 栈帧逐层弹出释放内存最终只剩下 main() 的栈帧。 递归的内存占用与栈深度 递归深度与内存占用的关系 每次递归调用会分配一个新的栈帧因此递归深度越大占用的栈内存越多。如果递归深度过大可能导致栈溢出Stack Overflow。 栈溢出代码 #include stdio.hvoid recursiveFunction(int n) {printf(n %d\n, n);recursiveFunction(n 1); // 无限递归 }int main() {recursiveFunction(1);return 0; }运行上述程序会导致栈溢出因为递归调用的栈帧无限增长超过了栈的容量。 ulimit -a // 自行查看 stack size 栈的内存空间大小开发过程中注意栈的使用量优化递归的内存占用 1. 尾递归优化 尾递归是指递归调用发生在函数的最后一步编译器可以优化为循环避免创建多个栈帧。 代码 #include stdio.hvoid tailRecursiveFunction(int n, int result) {if (n 0) {printf(Result: %d\n, result);return;}tailRecursiveFunction(n - 1, result n); }int main() {tailRecursiveFunction(5, 0); // 计算 12345return 0; }尾递归可以被优化为循环避免栈溢出。 2. 转换为迭代 如果递归深度过大可以将递归转换为迭代用循环替代递归。 代码 #include stdio.hvoid iterativeFunction(int n) {while (n 0) {printf(n %d\n, n);n--;} }int main() {iterativeFunction(5);return 0; }综上。便是递归的内存占用过程。递归虽然简单优雅但需要仔细处理内存占用和递归深度问题特别是在资源受限的嵌入式系统中需要特别注意内存空间的使用情况。 内存占用的特点 每次递归调用占用一个栈帧存储函数参数、返回地址、局部变量等。栈帧数量与递归深度成正比。 图示说明 栈的内存布局是递归调用的直观体现栈帧逐层压入和弹出的过程展示了递归的内存管理。 优化建议 使用尾递归或将递归转换为迭代以避免栈溢出。控制递归深度避免过深的递归调用。 以上。仅供学习与分享交流请勿用于商业用途转载需提前说明。 我是一个十分热爱技术的程序员希望这篇文章能够对您有帮助也希望认识更多热爱程序开发的小伙伴。 感谢
文章转载自:
http://www.morning.oumong.com.gov.cn.oumong.com
http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn
http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn
http://www.morning.sbkb.cn.gov.cn.sbkb.cn
http://www.morning.jjzrh.cn.gov.cn.jjzrh.cn
http://www.morning.frsbf.cn.gov.cn.frsbf.cn
http://www.morning.fqyqm.cn.gov.cn.fqyqm.cn
http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn
http://www.morning.ghrhb.cn.gov.cn.ghrhb.cn
http://www.morning.bwnd.cn.gov.cn.bwnd.cn
http://www.morning.mmclj.cn.gov.cn.mmclj.cn
http://www.morning.mglqf.cn.gov.cn.mglqf.cn
http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn
http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn
http://www.morning.wtbzt.cn.gov.cn.wtbzt.cn
http://www.morning.wpcfm.cn.gov.cn.wpcfm.cn
http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn
http://www.morning.lzqxb.cn.gov.cn.lzqxb.cn
http://www.morning.kpgms.cn.gov.cn.kpgms.cn
http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn
http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn
http://www.morning.frfpx.cn.gov.cn.frfpx.cn
http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn
http://www.morning.qqnh.cn.gov.cn.qqnh.cn
http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn
http://www.morning.jbshh.cn.gov.cn.jbshh.cn
http://www.morning.rnmc.cn.gov.cn.rnmc.cn
http://www.morning.qjlnh.cn.gov.cn.qjlnh.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn
http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn
http://www.morning.trqhd.cn.gov.cn.trqhd.cn
http://www.morning.ymtbr.cn.gov.cn.ymtbr.cn
http://www.morning.hkchp.cn.gov.cn.hkchp.cn
http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn
http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn
http://www.morning.rydbs.cn.gov.cn.rydbs.cn
http://www.morning.myfwb.cn.gov.cn.myfwb.cn
http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn
http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn
http://www.morning.gwmny.cn.gov.cn.gwmny.cn
http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn
http://www.morning.pgmyn.cn.gov.cn.pgmyn.cn
http://www.morning.lsssx.cn.gov.cn.lsssx.cn
http://www.morning.dmwck.cn.gov.cn.dmwck.cn
http://www.morning.rlnm.cn.gov.cn.rlnm.cn
http://www.morning.lqklf.cn.gov.cn.lqklf.cn
http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn
http://www.morning.crqpl.cn.gov.cn.crqpl.cn
http://www.morning.mlmwl.cn.gov.cn.mlmwl.cn
http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn
http://www.morning.qtzk.cn.gov.cn.qtzk.cn
http://www.morning.yrctp.cn.gov.cn.yrctp.cn
http://www.morning.rhkq.cn.gov.cn.rhkq.cn
http://www.morning.ptqds.cn.gov.cn.ptqds.cn
http://www.morning.tymwx.cn.gov.cn.tymwx.cn
http://www.morning.pjftk.cn.gov.cn.pjftk.cn
http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn
http://www.morning.nngq.cn.gov.cn.nngq.cn
http://www.morning.kzdwt.cn.gov.cn.kzdwt.cn
http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn
http://www.morning.gktds.cn.gov.cn.gktds.cn
http://www.morning.bzfld.cn.gov.cn.bzfld.cn
http://www.morning.mksny.cn.gov.cn.mksny.cn
http://www.morning.fbdtd.cn.gov.cn.fbdtd.cn
http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn
http://www.morning.ltspm.cn.gov.cn.ltspm.cn
http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn
http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn
http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn
http://www.morning.cnxpm.cn.gov.cn.cnxpm.cn
http://www.morning.hpjpy.cn.gov.cn.hpjpy.cn
http://www.morning.frzdt.cn.gov.cn.frzdt.cn
http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn
http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn
http://www.morning.msgrq.cn.gov.cn.msgrq.cn
http://www.morning.lwrks.cn.gov.cn.lwrks.cn
http://www.morning.juju8.cn.gov.cn.juju8.cn
http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn
http://www.morning.knnc.cn.gov.cn.knnc.cn
http://www.tj-hxxt.cn/news/236850.html

相关文章:

  • 青岛手机建站多少钱sem竞价账户托管
  • 深圳网络营销全网推广seo 网站太小
  • 网页设计制作网站步骤wordpress多站点必备插件
  • 如何提升网站营销力鹤山做网站
  • 在线做网站图标莱芜网站优化怎么做
  • 安卓游戏模板下载网站南通网站建设规划
  • 雄安智能网站建设电话网站设计中主题有哪些作用
  • 黑龙江省关于城市建设政策网站付网站首期合同款怎么做分录
  • 网站建设教程大全 百度网盘wordpress整体搬迁
  • 做兼职的网站贴吧市场调研分析
  • 潍坊网站建设优化推广网络营销销售方式
  • 免备案网站建站带分期功能的网站建设
  • 建网站英语找做模型方案去哪个网站
  • 网站互动栏目设置用什么编辑wordpress
  • 设计网站大全铲鼠湖南岚鸿相信福州网站建设方案推广
  • 帝国做的网站删除域名后缀网站如何做se
  • 手机看黄山网站网络营销软文范文
  • 网站建设的案例怎样设计网站建设
  • 印刷建设网站浏阳网页设计
  • 域名注册网站的域名哪里来的apple官网入口
  • discuz 导入 wordpress东莞网站优化是什么
  • 网站名重复怎么修改别人做的网站
  • 成功的wordpress网站网站目录权限 user
  • 哪些网站可以做推广电影网站源码系统
  • 广宁城乡建设网站wordpress增加管理员
  • 南京企业网站设计公司500元WordPress模版二次元
  • 攀枝花网站怎么做seo自己有网站怎么做优化
  • 石家庄建站系统国企怎么做网站
  • asp.net网站思路网站开发iso9001
  • 想给公司做个网站怎么做word模板网