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

安庆信德建设咨询有限公司网站wordpress禁用自动更新

安庆信德建设咨询有限公司网站,wordpress禁用自动更新,大秀,my77731免费域名查询本篇总结函数调用过程会存在的一些奇怪现象#xff0c;空间复用问题#xff0c;其实本质上涉及函数调用的底层原理#xff0c;理解函数栈帧的创建和销毁这样的问题直接迎刃而解。1.空间复用问题案例1案例22.函数调用过程不清晰问题案例33.总结1.空间复用问题 案例1 我们先… 本篇总结函数调用过程会存在的一些奇怪现象空间复用问题其实本质上涉及函数调用的底层原理理解函数栈帧的创建和销毁这样的问题直接迎刃而解。1.空间复用问题案例1案例22.函数调用过程不清晰问题案例33.总结1.空间复用问题 案例1 我们先来看一个代码 void F1() {int a 10;printf(%p\n, a); } void F2() {int b 10;printf(%p\n, b); } int main() {F1();F2();return 0; }F1和F2函数的操作基本一样你说它们所开辟的空间的地址是同一块吗 或者说a和b的地址是一样的吗 结果是一样的。为什么呢 我们知道调用函数需要给函数开辟栈帧也就是开辟空间而栈帧是在堆区开辟的 当函数使用完后该函数栈帧就要销毁。 但不是真正意义上的销毁而是把使用该空间的权限还给操作系统这片区域不再受你操控。 所以我们在调用F1()函数时操作系统先给F1()开辟栈帧给变量a分配内存。然后当F1()函数结束时该空间又被操作系统收回 接着又调用F2()函数操作系统又将刚刚收回的空间又分配给F2()函数。 所以F1函数和F2函数使用的空间地址是一样的变量a和变量b的地址也就是一样的。 案例2 这是一个阶乘递归的代码 long long Fac(size_t N) {if (0 N)return 1;return Fac(N - 1) * N; } int main() {long long n;Fac(n);return 0; }请问它的空间复杂度和时间复杂度是多少呢 函数Fac每次调用都会返回Fac(n-1)*n,直到N0时才返回1. 也就是递归了n次所以时间复杂度为O(n). 而空间复杂度呢 因为Fac函数每次调用自己都会开辟一个函数栈帧调用了n次所以开辟了n个空间。 所以空间复杂度也是O(n). 那想一下Fac(n)与Fac(n-1)与Fac(n-2)…等函数的空间地址是同一块空间吗 综合上面的案例我们应该判断它们不是同一块空间的。 为什么呢 上面的案例是F1函数调用完,结束后再调用的F2函数 而阶乘递归是属于嵌套调用每个函数都还没完全结束就又调用另一个函数了所以它们开辟的空间肯定不一样它们各自使用的空间都没有被操作系统收回过怎么可能有其他函数又去占用这块空间呢。 而对案例修改一下也可以让F1和F2函数的地址不一样也就是在F1函数的内部去调用函数F2这样它们的空间就不会重复了。 如下所示 void F1() {int a 10;printf(%p\n, a);F2 } void F2() {int b 10;printf(%p\n, b); } int main() {F1();return 0; }2.函数调用过程不清晰问题 案例3 这是一个斐波那契契递归Fib long long Fib(size_t N) {if (N 3)return 1;return Fib(N - 1) Fib(N - 2); } int main() {long long n;Fib(n);return 0; }你知道这个递归Fib函数的空间复杂度和时间复杂度吗 Fib(n)函数每次返回两个函数Fib(n-1)Fib(n-2).直到n3时返回1. 也就是Fib函数每次调用都会又调用两个函数而这个两个函数相当于又调用4个函数依次类推…最后应该调用2^n次 所以时间复杂度为O(2^n). 那空间复杂度呢空间复杂度是多少呢 有的人可能想呀它不是相当于调用了2 ^ n次嘛那不就是申请了2 ^ n个空间吗。真的是这样吗 可能现在还有很多人没有搞清楚函数是怎么调用的递归是怎么调用的。 有的人可能想是Fib(n)调用Fib(n-1)和Fib(n-2),然后操作系统就给Fib(n-1)和Fib(n-2)分配栈帧了但其实不是。 函数的调用只有完全调用完才能去执行下一步。 调用Fib(n-1)后其实会继续往下面调用Fib(n-2),然后再往下调用Fib(n-3)直到调用到Fib(2),Fib(2)返回1后Fib(2)也就结束函数栈帧销毁回到F(3)F(3)这时才开始调用F(1),F(1)返回1F(1)的栈帧销毁返回F(3)F(2)又开始调用了。依次类推 Fib(2)返回后操作系统是不是就将它的空间回收了然后又调用了Fib1所以Fib(1)开辟的空间就是刚刚操作系统收回的空间呀。 其实就是左边Fib(2)和右边F(1)用的是同一块空间。依次类推Fib(4)返回后空间被收回然后操作系统又将空间分配给右边的Fib(3)使用。所以大体上左边和右边是共用一块空间而左边是调用了n个空间所以最后的空间大小是O(n). 3.总结 这三个个案例本质上就是要搞清楚函数栈帧是如何创建的以及如何销毁的。 搞清楚函数是如何调用的调用前操作系统要给函数分配栈帧调用函数结束后操作系统要将栈帧收回。 如果对函数栈帧方面有兴趣的可以阅读一下博主的《细谈函数栈帧的创建与销毁》。 还有我们可以发现 时间是一去不复返的不可再重复利用。 而空间是可以重复利用的。所以我们要特别重视算法的时间效率。
http://www.dnsts.com.cn/news/35111.html

相关文章:

  • 中铁韩城建设公司网站cpa项目怎么做必须有网站么
  • 网站设计师工资怎样用微软雅黑做网站可以吗
  • 许昌专业做企业网站的深圳全网推广营销怎么做
  • 温泉酒店网站建设方案全网营销口碑整合营销
  • 网站页面布局的目的软件开发与网站开发
  • 国内做网站最好的公司wordpress分类栏目文章
  • 男性产品哪个网站可以做百度手机seo软件
  • 怎么取网页视频网站元素网站关键词排名快速提升
  • 可以做网站的公司房地产集团网站建设方案
  • 数据统计网站电商平台项目计划书
  • 克隆网站到wordpress修改wordpress图片模糊加载
  • 怎样做网络销售网站网站建设对于企业发展的优势
  • 全球网站域名后缀实名认证sdk
  • 做动画 的 网站有哪些软件深圳做网站多钱
  • 正品查询网站怎么做哪些网站可以找到做跨境电商的公司
  • 网站建设-设计acca少女sdanvi
  • 微商网站模板ui设计培训哪里好
  • 南昌模板建站公司购物网站哪里建最好
  • 淮海中路街道网站建设广州网站建设商
  • 淘宝做店招的网站如何弄小程序
  • 导购网站开发要多少钱二维码生成器使用方法
  • 最精品网站建设怎么找广告商接广告
  • 网站建设互联网加wordpress文章内图片不显示
  • 做网站一般建多大的页面深圳龙华区和联社区
  • 专业的建站公司推广上海百度公司
  • 网站建设中 源码上海住房和城乡建设局网站首页
  • 网站建设设计报告前言关键词排名什么意思
  • 织梦php网站如何确认建设银行网站不是假的
  • 甘肃省交通建设项目招投标中心网站租赁商城手机网站开发
  • 哪个网站做贷款推广wordpress评论链接