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

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

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

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

首先创建一个对象


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

然后递归输出key


//递归输出key
function 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交换位置


//递归输出key
function 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值