码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 无限递归一定会栈溢出吗


    看一个面试题

    function foo(){

      setTimeout(foo, 0)

    }

    关于栈溢出我们都有一个感觉就是无限递归就会导致栈溢出,为什么呐?

    很简单,因为栈它是一块内存空间,每一次的函数调用都相当于往这个函数里面添加了一个执行上下文,那如果说这一次函数调用还没结束又调用了自身,那又会加一个,直到把整个栈加满,空间不够了,就叫做栈溢出。

    所以说,如果到了代码层面,你这样写:

    function foo(){

      foo()

    }

    foo()

    这个就是一个典型的无限递归的场景,自身的函数还没有执行完就开始调用自身,你执行一下最终会导致栈溢出,会报栈溢出的错。

    但是如果是面试题的那种写法呐?这种写法会不会导致栈溢出呐?

    function foo(){

      setTime out(foo, 0)

    }

    这里你执行就会发现,无论等多久都不会发生栈溢出的报错。

    那为什么呐?这里不是也是无限递归吗?这里为什么没有发生栈溢出的报错?

    一开始执行foo的时候,往栈里面添加了一个上下文,在这个执行期间,它会开启一个计时器,计时器到达之后会再一次执行foo,但是定时器是异步的,也就是说这个函数本身不会等待这个计时器结束才去结束,foo该运行结束就会运行结束,运行结束之后就会出栈,然后才是计时器到达,如此往复,所以不会发生栈溢出。

    虽然是无限递归下去,cpu忙的要死,但不会导致栈溢出。

    这个题还有很多的变种,比方说,这一块写成下面这个样子,需要想一想这样子做会不会导致栈溢出

    function foo(){

      setTimeout( foo(), 0)

    }

    foo()

    你执行发现,这样一些又会导致栈溢出,因为这一次调用foo函数是在计时器之前你要作为参数传进去,所以说你调用这个函数把他的返回结果作为参数传到这个计时器,在计时器之前又调用了这个函数,就会出现本次foo的函数没有运行结束就会运行下一个foo,如此往复就会导致栈溢出。

  • 相关阅读:
    如何配置mybatis并且自动生成实体类pojo和mapper
    Mysql 分布式序列算法
    C/C++操作加密与不加密的zip文件
    机房动环监控系统有哪些告警功能,机房动环监控系统是什么?
    【MySQL】 MySQL亿级数据、主从架构,Sharding分片
    MySQL索引、使用场景、失效场景、回表、索引覆盖
    6.cuBLAS开发指南中文版--cuBLAS中的SetStream()和SetWorkspace()
    关于Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: Android.mk引发的思考
    学习笔记——斯坦纳树
    使用方便、易于集成、可扩展的用于物流运输行业的文档管理软件
  • 原文地址:https://blog.csdn.net/zhumizhumi/article/details/133891229
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号