博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
由“递归遍历二叉树”引发的思考
阅读量:7006 次
发布时间:2019-06-27

本文共 1375 字,大约阅读时间需要 4 分钟。

由“递归遍历二叉树”引发的思考

递归的用法我感觉自己已经掌握了,可是今天在递归遍历二叉树时,它又迷一样令我费解。我本人在算法这一块很薄弱,所以想把这个问题发出来,希望有大神能够为我解答;同时也希望能帮助到那些对“递归”一知半解的朋友。

蜜桃猫镇楼 (ง •_•)ง

首先创建一个对象

//创建一个对象var obj = {    key:1,    next: {        key: 2,        next: {            key: 3,            next: {                key: 4,                next: {                    key: null                    next: null                }            }        }    }}复制代码

然后递归输出key

//递归输出keyfunction Recursion(obj) {    if(obj.next !== null) {                console.log(obj.key) //1        Recursion(obj.next) //2    }}Recursion(obj)复制代码

至此一个非常正经的递归就实现了,浏览器里面输出1,2,3,4,非常好理解,但是把//1和//2调换下位置,像下面这样

将上面代码1和2交换位置

//递归输出keyfunction Recursion(obj) {    if(obj.next !== null) {                Recursion(obj.next) //2        console.log(obj.key) //1    }}Recursion(obj)复制代码

我惊奇的发现...key的输出顺序反了,变成4,3,2,1,为什么会这样呢?于是我在Chrome里面设置断点调试,过程如下

1.传入obj对象

2.此时obj不为空,key为1,next指向2,控制台没有输出信息
3.此时obj不为空,key为2,next指向3,控制台没有输出信息
4.此时obj不为空,key为3,next指向4,控制台没有输出信息
5.此时obj不为空,key为4,next指向null,控制台没有输出信息
6.此时obj不为空,key为null,next为null,控制台没有输出信息
7.序继续往下执行
然后我就发现
console.log(obj.key)执行了四次!!依次打印出
4,3,2,1,为什么会这样??它不应该执行一次后就直接结束了吗?这里我一直想不通。我有一个猜测就是可能每次递归调用的时候,浏览器将函数压入栈中才导致输出结果反转的。至于
console.log(obj.key)为什么会执行四次,我就想不通了,希望有懂的朋友不吝赐教~

我表达的可能不是很清楚,大家可以把这两段代码放到本地执行看看;

我的问题就是 1.为什么console.log(obj.key)执行了四次?是什么原因导致的~~~~

转载于:https://juejin.im/post/5c2e1ecb518825124e277a41

你可能感兴趣的文章
Xinetd超级服务经典功能汇总
查看>>
等额本金、等额本息工具类(Java版)
查看>>
Data Grip 激活码
查看>>
终于知道网页上一些黑白色的小图标是哪里来的了
查看>>
python(十一)异常
查看>>
利用mouseover和mouseout这两个鼠标事件调用js做下拉菜单
查看>>
about hint tracks
查看>>
8.5折!图表控件TeeChart特价中...
查看>>
Fastreport史无前例5折,仅十天快抢!
查看>>
PHP获取Cookie模拟登录CURL
查看>>
javascript获取文件名和路径
查看>>
Microsoft Office 2013 简体中文版VOL 下载集合 // 微软批量服务中心 VLSC 原版 //
查看>>
struts2 的线程安全
查看>>
javascript 函数
查看>>
每天实践一点点
查看>>
ubuntu安装docker
查看>>
spring3.0使用annotation完全代替XML
查看>>
Axis2用法:soap消息携带消息头
查看>>
如何高效地利用时间,提高工作效率?
查看>>
static用法小结
查看>>