由“递归遍历二叉树”引发的思考
递归的用法我感觉自己已经掌握了,可是今天在递归遍历二叉树时,它又迷一样令我费解。我本人在算法这一块很薄弱,所以想把这个问题发出来,希望有大神能够为我解答;同时也希望能帮助到那些对“递归”一知半解的朋友。
蜜桃猫镇楼 (ง •_•)ง
首先创建一个对象
//创建一个对象
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对象
console.log(obj.key)
执行了四次!!依次打印出
4,3,2,1
,为什么会这样??它不应该执行一次后就直接结束了吗?这里我一直想不通。我有一个猜测就是可能每次递归调用的时候,浏览器将函数压入栈中才导致输出结果反转的。至于
console.log(obj.key)
为什么会执行四次,我就想不通了,希望有懂的朋友不吝赐教~
我表达的可能不是很清楚,大家可以把这两段代码放到本地执行看看;
我的问题就是 1.为什么console.log(obj.key)
执行了四次?是什么原因导致的~~~~